`go install` добавляет запись в` go .mod` - PullRequest
0 голосов
/ 23 января 2020

Я немного озадачен тем, как модули Go работают при установке двоичных файлов с использованием go install.

Я попытался установить (https://github.com/joho/godotenv) двоичный файл, выполнив go install github.com/joho/godotenv/cmd/godotenv, и обнаружил, что он добавляет запись в go.mod. Я заблудился, так как мы не используем этот пакет в коде, и после запуска go mod tidy он удаляется (поскольку это не код).

Может кто-нибудь объяснить, ожидается ли поведение go модулей? Во-вторых, как мне избежать добавления его в go.mod, поскольку нам нужно только установить и выполнить двоичный файл?

Спасибо.

Go версия: go version go1.13.4 darwin/amd64

1 Ответ

2 голосов
/ 23 января 2020

Команда go: Файл go .mod:

Команда go автоматически обновляет go .mod при каждом использовании графика модуля. , чтобы убедиться, что go .mod всегда точно отражает реальность и правильно отформатирован.

Инструмент go автоматически обновит go.mod, когда обнаружит неточность зависимостей при выполнении сборки.

Когда вы устанавливаете github.com/joho/godotenv/cmd/godotenv из вашего модуля, для этой установки требуется, по крайней мере, соответствующий пакет, который собирается / устанавливается (а также его зависимости, транзитивно).

Вы можете безопасно запустить go mod tidy отменить запись этой «одноразовой» зависимости.

В общем, если вы хотите запретить инструменту go обновлять файл go.mod, вы можете использовать флаг -mod=readonly, но это завершится с ошибкой go install ( "невозможно загрузить пакет: пакет xxx: поиск импорта отключен с помощью -mod = readonly" ). Вы можете прочитать больше об этом здесь: Go Wiki: Go modules: Могу ли я контролировать, когда обновляется go .mod и когда инструменты go используют сеть для удовлетворения зависимостей?

В качестве альтернативы, если вы хотите избежать этого, соберите / установите ваши инструменты за пределами вашего модуля. Для этого вы можете использовать "фиктивный" модуль.

...