суббота, 29 февраля 2020 г.

Релиз Go 1.14: инструменты, команда go

Вендоринг

Когда основной модуль содержит каталог vendor верхнего уровня и его файл go.mod указывает go 1.14 или выше, команда go по умолчанию теперь имеет значение -mod=vendor для операций, которые принимают этот флаг. Новое значение для этого флага, -mod=mod, заставляет команду go вместо этого загружать модули из кэша модулей (например, когда отсутствует каталог vendor).

Если задано -mod=vendor (явно или по умолчанию), команда go теперь проверяет, что файл vendor/modules.txt основного модуля соответствует его файлу go.mod.

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

Флаги

Команда go get больше не принимает флаг -mod. Ранее настройка флага либо игнорировалась, либо приводила к сбою сборки.

-mod=readonly теперь устанавливается по умолчанию, когда файл go.mod доступен только для чтения и отсутствует каталог vendor верхнего уровня.

-modcacherw - это новый флаг, который указывает команде go оставлять вновь созданные каталоги в кеше модуля с их разрешениями по умолчанию, а не делать их доступными только для чтения. Использование этого флага повышает вероятность того, что тесты или другие инструменты случайно добавят файлы, не включенные в проверенную контрольную сумму модуля. Однако он позволяет использовать rm -rf (вместо go clean -modcache) для удаления кэша модуля.

-modfile=file - это новый флаг, который указывает команде go читать (и, возможно, записывать) альтернативный файл go.mod вместо файла в корневом каталоге модуля. Файл с именем go.mod должен все еще присутствовать для определения корневого каталога модуля, но к нему нет доступа. Если указан параметр -modfile, также используется альтернативный файл go.sum: его путь определяется из флага -modfile путем обрезки расширения .mod и добавления .sum.

Переменные среды

GOINSECURE - это новая переменная среды, которая указывает команде go не требовать HTTPS-соединения и пропускать проверку сертификата при извлечении определенных модулей непосредственно из их источников. Как и существующая переменная GOPRIVATE, значение GOINSECURE представляет собой список glob паттернов, разделенных запятыми.

Команды вне модулей

Когда режим поддержки модуля включен явно (путем установки GO111MODULE=on), большинство команд модуля имеют более ограниченную функциональность, если отсутствует файл go.mod. Например, go build, go run, а другие команды сборки могут собирать пакеты только в стандартной библиотеке и пакеты, указанные как файлы .go в командной строке.

Ранее команда go разрешала бы путь каждого пакета к последней версии модуля, но не записывала путь или версию модуля. Это привело к медленным, невоспроизводимым сборкам.

go get продолжает работать так же, как и раньше, так же как и go mod download и go list -m с явными версиями.

+incompatible версии

Если последняя версия модуля содержит файл go.mod, go get больше не будет обновляться до несовместимой (incompatible) основной версии этого модуля, если только такая версия не запрашивается явно или уже требуется. go list также пропускает несовместимые основные версии для такого модуля при извлечении непосредственно из системы управления версиями, но может включать их, если о них сообщает прокси.

Обслуживание файла go.mod

Команды go, кроме go mod tidy, больше не удаляют директиву require, которая указывает версию косвенной зависимости, которая уже подразумевается другими (транзитивными) зависимостями основного модуля.

Команды go, кроме go mod tidy, больше не редактируют файл go.mod, если изменения носят только косметический характер.

Когда задано -mod=readonly, команды go больше не будут работать из-за отсутствующей директивы go или ошибочного // indirect комментария.

Загрузка модуля

Команда go теперь поддерживает хранилища Subversion в режиме модуля.

Команда go теперь включает фрагменты текстовых сообщений об ошибках от прокси модулей и других HTTP-серверов. Сообщение об ошибке будет отображаться только в том случае, если оно действительно UTF-8 и состоит только из графических символов и пробелов.

Тестирование

go test -v теперь передает поток t.Log тогда, когда это происходит, а не в конце всех тестов.


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


Купить gopher

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

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