Самый удобный способ работы с локальными зависимостями Go?
Интересно, как работать с локальными библиотеками. Допустим, я хочу разрабатывать два проекта vgo параллельно,my-project
и my-util
проект, который используется my-project
. Конечноmy-util
доступен в удаленном репозитории, но поскольку невозможно зафиксировать все мои изменения здесь в главной ветке, чтобы сделать их доступными (и тестируемыми) в my-project
, Я хочу использовать локальную версию my-util
вместо. Похож на старый добрыйmvn clean install
в Java.
Я полагаю, это должно быть реализовано с помощью replace
директива. Но это означает, что мне нужно манипулировать своимиgo.mod
в my-project
в некотором смысле, я не хочу делать это позже. Есть ли способ обойти эту проблему, кроме удаления всех моихreplace
директивы перед фиксацией и просто повторно добавить их после?
Есть что-то вроде go_local.mod
который содержит replace
директивы и могут быть добавлены .gitignore
? Или какая-то переменная среды, в которой я могу определять замены? Или хотя бы IDE, которая позволяет игнорироватьreplace
директивы в go.mod
на фиксации?
Или я ошибаюсь и есть ли более удобная альтернатива replace
подход в моем случае?
1 ответ
Похоже, Go наконец-то придумал лучшее решение. В версии 1.18 можно создать файл рабочего места, в котором
replace
можно применить директивы: https://go.googlesource.com/proposal/+/master/design/45713-workspace.md
Так что это должно работать:
go 1.18
use (
./my-project // location of the go.mod of my project
)
replace github.com/NotX/my-util => ./my-util // location of go.mod
Итак, начиная с
go.work
расположение файла команда
go test ./my-project/...
теперь следует использовать локальный репозиторий утилит.
1.18 еще не выпущен, так что это может немного измениться.