понедельник, 8 марта 2021 г.

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

После того, как репозиторий модуля был проверен в конкретной ревизии, команда go должна найти каталог, содержащий файл go.mod модуля (корневой каталог модуля).

Напомним, что путь к модулю состоит из трех частей: корневой путь репозитория (соответствующий корневому каталогу репозитория), подкаталог модуля и суффикс основной версии (только для модулей, выпущенных с версией v2 или выше).

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

Модули иногда определяются в подкаталогах репозитория. Обычно это делается для больших репозиториев с несколькими компонентами, которые необходимо выпускать и управлять версиями независимо. Ожидается, что такой модуль будет найден в подкаталоге, который соответствует части пути модуля после корневого пути репозитория. Например, предположим, что модуль example.com/monorepo/foo/bar находится в репозитории с корневым путем example.com/monorepo. Его файл go.mod должен находиться в подкаталоге foo/bar.

Если модуль выпущен в основной версии v2 или выше, его путь должен иметь суффикс основной версии. Модуль с суффиксом основной версии может быть определен в одном из двух подкаталогов: с суффиксом и без. Например, предположим, что новая версия указанного выше модуля выпущена по пути example.com/monorepo/foo/bar/v2. Его файл go.mod может находиться либо в foo/bar, либо в foo/bar/v2.

Подкаталоги с суффиксом основной версии являются подкаталогами основной версии. Их можно использовать для разработки нескольких основных версий модуля в одной ветке. Это может быть ненужным, если разработка нескольких основных версий ведется в разных ветвях. Однако подкаталоги основной версии имеют важное свойство: в режиме GOPATH пути импорта пакетов точно соответствуют каталогам в GOPATH/src. Команда go обеспечивает минимальную совместимость модулей в режиме GOPATH, поэтому подкаталоги основной версии не всегда необходимы для совместимости с проектами, созданными в режиме GOPATH. Однако старые инструменты, которые не поддерживают минимальную совместимость модулей, могут иметь проблемы.

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


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


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

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