четверг, 11 февраля 2021 г.

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

Модуль, выпущенный в основной версии 2 или выше, должен иметь соответствующий суффикс основной версии в пути к модулю. Например, если модуль выпущен в версии 2.0.0, его путь должен иметь суффикс /v2. Это позволяет команде go обрабатывать несколько основных версий проекта как отдельные модули, даже если они разработаны в одном репозитории.

Требование суффикса основной версии было введено, когда поддержка модуля была добавлена к команде go, и многие репозитории уже помечали выпуски с основной версией 2 или выше до этого. Для обеспечения совместимости с этими репозиториями команда go добавляет суффикс +incompatible к версиям с основной версией 2 или выше без файла go.mod. +incompatible означает, что версия является частью того же модуля, что и версии с меньшими основными номерами версий; следовательно, команда go может автоматически обновиться до более поздних +incompatible версий, даже если это может нарушить сборку.

Рассмотрим пример требования ниже:

require example.com/m v4.1.2+incompatible

Версия v4.1.2+incompatible относится к тегу семантической версии v4.1.2 в репозитории, который предоставляет модуль example.com/m. Модуль должен находиться в корневом каталоге репозитория (то есть корневой путь репозитория также должен быть example.com/m), а файл go.mod не должен присутствовать. Модуль может иметь версии с более низкими основными номерами версий, например v1.5.2, и команда go может автоматически обновляться до v4.1.2+incompatible с этими версиями.

Репозиторий, который переносится на модули после пометки версии v2.0.0, обычно должен выпускать новую основную версию. В приведенном выше примере автор должен создать модуль с путем example.com/m/v5 и выпустить версию v5.0.0. Автору также следует обновить импорт пакетов в модуле, чтобы использовать префикс example.com/m/v5 вместо example.com/m.

Обратите внимание, что суффикс +incompatible не должен появляться в теге в репозитории; тег типа v4.1.2+incompatible будет проигнорирован. Суффикс появляется только в версиях, используемых командой go.

Также обратите внимание, что суффикс +incompatible может появляться в псевдоверсиях. Например, v2.0.1-20200722182040-012345abcdef+incompatible может быть допустимой псевдо-версией.


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


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

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