вторник, 2 марта 2021 г.

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

Некоторые команды позволяют указать версию модуля с помощью запроса версии, который появляется после символа @ после пути к модулю или пакету в командной строке.

Примеры:

go get example.com/m@latest
go mod download example.com/m@master
go list -m -json example.com/m@e3702bed2

Запрос версии может быть одним из следующих:

  • Полностью указанная семантическая версия, например v1.2.3, которая выбирает конкретную версию.
  • Префикс семантической версии, например v1 или v1.2, который выбирает самую высокую доступную версию с этим префиксом.
  • Семантическое сравнение версий, например <v1.2.3 или >= v1.5.6, при котором выбирается ближайшая доступная версия для цели сравнения (самая низкая версия для > и >= и самая высокая версия для < и <=).
  • Идентификатор редакции для базового исходного репозитория, например хеш-префикс коммита, тег редакции или имя ветки. Если ревизия помечена семантической версией, этот запрос выбирает эту версию. В противном случае этот запрос выбирает псевдоверсию для базового коммита. Обратите внимание, что таким образом нельзя выбрать ветви и теги с именами, совпадающими с другими запросами версии. Например, запрос v2 выбирает последнюю версию, начиная с v2, а не ветку с именем v2.
  • Строка latest, которая выбирает самую высокую доступную версию релиза. Если релизных версий нет, последняя выбирает самую высокую предварительную версию. Если помеченных (тегированных) версий нет, latest выбирает псевдоверсию для коммита в конце ветки по умолчанию репозитория.
  • Строка upgrade аналогично latest, за исключением того, что если модуль в настоящее время требуется более высокой версии, чем выберет latest (например, предварительный релиз), upgrade выберет текущую версию.
  • Строка patch, которая выбирает последнюю доступную версию с теми же основными и дополнительными номерами версий, что и у текущей требуемой версии. Если в настоящее время версия не требуется, patch эквивалентен latest версии. Начиная с Go 1.16, для go get требуется текущая версия при использовании patch (но флаг -u=patch не имеет этого требования).

За исключением запросов для конкретных именованных версий или ревизий, все запросы учитывают доступные версии, указанные с помощью go list -m -versions. Этот список содержит только версии с тегами, но не псевдоверсии. Версии модуля, запрещенные директивами exclude в файле go.mod основного модуля, не рассматриваются. Версии, на которые распространяются директивы retract в файле go.mod из последней версии того же модуля, также игнорируются, за исключением случаев, когда флаг -retracted используется с go list -m и кроме случаев загрузки директив retract.

Релизные версии предпочтительнее предварительных. Например, если доступны версии v1.2.2 и v1.2.3-pre, latest запрос выберет v1.2.2, даже если v1.2.3-pre выше. Запрос <v1.2.4 также выберет v1.2.2, хотя v1.2.3-pre ближе к v1.2.4. Если релиз или предварительная версия недоступны, запросы версии latest, upgrade и patch выберут псевдоверсию для коммита в конце ветки по умолчанию репозитория. Другие запросы сообщат об ошибке.


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


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

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