среда, 20 января 2021 г.

Модули в Golang: версии

Версия определяет неизменяемый снимок модуля, который может быть либо релизом, либо предварительным релизом (pre-release). Каждая версия начинается с буквы v, за которой следует семантическая версия.

Семантическая версия состоит из трех неотрицательных целых чисел (основная (major), дополнительная (minor) и патч-версия (patch) слева направо), разделенных точками. За версией патча может следовать необязательная строка предварительного выпуска, начинающаяся с дефиса. За строкой предварительного выпуска или патч-версии может следовать строка метаданных сборки, начинающаяся с плюса. Например, допустимые версии v0.0.0, v1.12.134, v8.0.5-pre и v2.0.9+meta.

Каждая часть версии указывает, является ли версия стабильной и совместима ли она с предыдущими версиями.

  • Основная версия должна быть увеличена, а дополнительная версия и патч-версия должны быть установлены на ноль после внесения обратно несовместимых изменений в общедоступный интерфейс модуля или задокументированные функции, например, после удаления пакета.
  • Дополнительная версия должна быть увеличена, а версия исправления (патч-версия) должна быть установлена на ноль после изменения обратной совместимости, например, после добавления новой функции.
  • Версия патча должна быть увеличена после изменения, которое не влияет на общедоступный интерфейс модуля, например исправления ошибки или оптимизации.
  • Суффикс предварительного выпуска указывает, что версия является предварительным выпуском. Предварительные версии сортируются перед соответствующими версиями выпуска. Например, v1.2.3-pre предшествует v1.2.3.
  • Суффикс метаданных сборки игнорируется для сравнения версий. Теги с метаданными сборки игнорируются в репозиториях контроля версий, но метаданные сборки сохраняются в версиях, указанных в файлах go.mod. Суффикс +incompatible означает версию, выпущенную до перехода на модули версии 2 или более поздней.

Версия считается нестабильной, если ее основная версия - 0 или у нее есть pre-release суффикс. На нестабильные версии не распространяются требования совместимости. Например, версия v0.2.0 может быть несовместима с версией v0.1.0, а версия v1.5.0-beta может быть несовместима с версией v1.5.0.

Go может обращаться к модулям в системах контроля версий с помощью тегов, веток или ревизий, которые не соответствуют этим соглашениям. Однако в основном модуле команда go автоматически преобразует имена ревизий, которые не соответствуют этому стандарту, в канонические версии. Команда go также удалит суффиксы метаданных сборки (за исключением +incompatible) как часть этого процесса. Это может привести к созданию псевдоверсии, предварительной версии, которая кодирует идентификатор ревизии (например, хеш Git коммита) и временную метку из системы контроля версий. Например, команда go get -d golang.org/x/net@daa7c041 преобразует хеш коммита daa7c041 в псевдо-версию v0.0.0-20191109021931-daa7c04131f5. Канонические версии требуются вне основного модуля, и команда go сообщит об ошибке, если неканоническая версия, такая как master, появится в файле go.mod.


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


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

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