Самый удобный способ работы с локальными зависимостями 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 еще не выпущен, так что это может немного измениться.

Другие вопросы по тегам