перейти к поставщику модов без обновления до последней

#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 все внесут такую же правку в требования вашего модуля.