#go #go-modules
#Вперед #модули go
Вопрос:
Я пытаюсь выяснить, возможно ли запустить поставщика модов go без обновления моего файла go.mod с помощью инструмента go.
Я специально go get package/subpackage@commit
и фиксирую свой go.mod
с правильной версией.
Затем я запускаю go mod vendor
, и он автоматически выдает версию пакета, которую я только что специально установил.
Я просмотрел эту страницу безрезультатно: https://github.com/golang/go/wiki/Modules#how-do-i-use-vendoring-with-modules-is-vendoring-going-away
Мне нужно использовать поставщика, потому что я запускаю скрипт, который редактирует некоторые из продаваемых модулей., Я смотрю на следующий процесс сборки:
GO111MODULE=on go get package/subpackge@commit
GO111MODULE=on go mod vendor
./Script/patch_vendors.sh --write
GO111MODULE=off go build
Мой другой вариант — изменять скопированный исходный код везде, куда поставщик модов go его не загружает, но
не уверен, как к этому подойти.
Заранее спасибо
Комментарии:
1. Попробуйте
go -mod=readonly mod vendor
.2. Спасибо; сделаю, если нашел этот документ: github.com/thepudds/go-module-knobs/blob/master/README.md но в нем упоминается только, что этот флаг применяется к
go build
3.
go mod
используется для игнорирования-mod
флага. Я не уверен, изменилось ли это к настоящему времени.
Ответ №1:
За https://tip.golang.org/cmd/go/#hdr-Maintaining_module_requirements:
go
Команда сама автоматически обновляетgo.mod
файл для поддержания стандартного форматирования и точностиrequire
инструкций.Любая команда go, которая обнаруживает незнакомый импорт, будет искать модуль, содержащий этот импорт, и автоматически добавит последнюю версию этого модуля в go.mod. […]
Любая команда go может определить, что требование к модулю отсутствует и должно быть добавлено […].
go mod vendor
Команда копирует все транзитивные импортируемые вами пакеты и их тесты, поэтому она автоматически обновит go.mod
файл, чтобы убедиться, что все импортированные пакеты присутствуют.
Таким образом, проблема здесь, вероятно, в том, что commit
вы выбрали для package/subpackage
, не удается предоставить какой-либо пакет, который появляется при транзитивном импорте вашей программы. Если это правильно, вы должны найти это go list all
, go test all
и go mod tidy
все внесут такую же правку в требования вашего модуля.