вторник, 16 февраля 2021 г.

Модули в Golang: команды с поддержкой модулей, вендоринг

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

Команда go mod vendor создает каталог с именем vendor в корневом каталоге основного модуля (main module), содержащий копии всех пакетов, необходимых для сборки и тестирования пакетов в основном модуле. Пакеты, которые импортируются только тестами пакетов вне основного модуля, не включаются. Как и в случае с go mod tidy и другими командами модуля, ограничения сборки, за исключением игнорирования, не учитываются при создании каталога vendor.

go mod vendor также создает файл vendor/modules.txt, содержащий список поставленных пакетов и версий модулей, из которых они были скопированы. Когда вендоринг включен, этот манифест используется в качестве источника информации о версии модуля, о чем сообщает go list -m и go version -m. Когда команда go читает vendor/modules.txt, она проверяет, соответствуют ли версии модуля go.mod. Если go.mod был изменен с момента создания vendor/modules.txt, команда go сообщит об ошибке. go mod vendor следует запустить снова, чтобы обновить каталог vendor.

Если каталог vendor присутствует в корневом каталоге основного модуля, он будет использоваться автоматически, если версия go в файле go.mod основного модуля 1.14 или выше. Чтобы явно включить вендоринг, вызовите команду go с флагом -mod=vendor. Чтобы отключить вендоринг, используйте флаг -mod=mod.

Когда вендоринг включен, команды сборки, такие как go build и go test, загружают пакеты из каталога vendor вместо доступа к сети или локальному кешу модуля. Команда go list -m выводит информацию только о модулях, перечисленных в go.mod. Команды go mod, такие как go mod download и go mod tidy, не работают по-другому, когда включен вендоринг, и все равно будут загружать модули и обращаться к кешу модулей. go get также не работает по-другому, когда включен вендоринг.

В отличие от вендоринга в GOPATH, команда go игнорирует каталоги поставщиков (vendor directories) в местах, отличных от корневого каталога основного модуля.


Читайте также:


Комментариев нет:

Отправить комментарий