среда, 21 апреля 2021 г.

Управление исходным кодом модуля

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

В этом посте описаны действия, которые вы можете предпринять при управлении репозиторием модулей. Для получения информации о последовательности шагов рабочего процесса, которые необходимо предпринять при переходе от версии к версии, смотрите Рабочий процесс выпуска модуля и управления версиями.

Go поддерживает следующие репозитории для публикации модулей: Git, Subversion, Mercurial, Bazaar и Fossil.

Как инструменты Go находят ваш опубликованный модуль

В децентрализованной системе Go для публикации модулей и получения их кода вы можете опубликовать свой модуль, оставив код в своем репозитории. Инструменты Go полагаются на правила именования, в которых есть пути к репозиториям и теги репозитория, указывающие имя модуля и номер версии. Когда ваш репозиторий соответствует этим требованиям, код вашего модуля может быть загружен из вашего репозитория с помощью инструментов Go, таких как команда go get.

Когда разработчик использует команду go get для получения исходного кода для пакетов, импортируемых его кодом, она выполняет следующие действия:

  1. Из операторов импорта в исходном коде Go команда go get определяет путь к модулю в пути к пакету.
  2. Используя URL-адрес, полученный из пути к модулю, команда находит источник модуля на прокси-сервере модуля или непосредственно в его репозитории.
  3. Находит источник для версии модуля для загрузки, сопоставляя номер версии модуля с тегом репозитория, чтобы обнаружить код в репозитории. Если номер версии для использования еще не известен, переходит по ссылке и находит последнюю версию релиза.
  4. Получает исходный код модуля и загружает его в локальный кеш модуля разработчика.

Организация кода в репозитории

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

На следующей диаграмме показана исходная иерархия для простого модуля с двумя пакетами.

Ваш модуль должен включать следующие файлы:

  • LICENSE
    Лицензия для модуля.
  • go.mod
    Описывает модуль, включая его путь к модулю (фактически, его имя) и его зависимости.
    Путь к модулю будет указан в директиве модуля, например:

    module example.com/mymodule
    

    Хотя вы можете редактировать этот файл, большая часть его поддерживается командами go.
  • go.sum
    Содержит криптографические хэши, которые представляют зависимости модуля. Инструменты Go используют эти хэши для аутентификации загруженных модулей, пытаясь подтвердить подлинность загруженного модуля. Если это подтверждение не удалось, Go отобразит ошибку безопасности.
    Файл будет пустым или будет отсутствовать, если нет зависимостей. Вы не должны редактировать этот файл, кроме как с помощью команды go mod tidy, которая удаляет ненужные записи.
  • Каталоги пакетов и исходные файлы .go.
    Каталоги и файлы .go, которые составляют пакеты и исходные коды Go в модуле.

Из командной строки вы можете создать пустой репозиторий, добавить файлы, которые будут частью вашего первоначального коммита, и выполнить коммит с сообщением. Вот пример использования git:

$ git init
$ git add --all
$ git commit -m "mycode: initial commit"
$ git push

Выбор объема репозитория

Вы публикуете код в модуле и он должен быть версионирован независимо от кода в других модулях.

Создание репозитория таким образом, чтобы в его корневом каталоге размещался один модуль, упростит обслуживание, особенно со временем, когда вы публикуете новые минорные версии и версии исправлений, переходите к новым основным версиям и т. д. Однако, если вам это необходимо, вы можете вместо этого поддерживать коллекцию модулей в одном репозитории.

Поддержка одного модуля на репозиторий

Вы можете поддерживать репозиторий, в котором есть исходный код одного модуля. В этой модели вы помещаете файл go.mod в корень репозитория с подкаталогами пакетов, содержащими исходный код Go.

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

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

Поддержка нескольких модулей в одном репозитории

Вы можете опубликовать несколько модулей из одного репозитория. Например, у вас может быть код в одном репозитории, который состоит из нескольких модулей, но вы хотите изменять версии этих модулей по отдельности.

Каждый подкаталог, который является корневым каталогом модуля, должен иметь свой собственный файл go.mod.

Исходный код модуля в подкаталогах изменяет форму тега версии, который вы должны использовать при публикации модуля. Перед частью тега с номером версии необходимо указать имя подкаталога, который является корнем модуля.

Например, для модуля example.com/mymodules/module1 ниже у вас будет следующее для версии v1.2.3:

  • Путь к модулю: example.com/mymodules/module1
  • Тег версии: module1/v1.2.3
  • Путь к пакету, импортированный пользователем: example.com/mymodules/module1/package1
  • Путь к модулю, указанный в директиве require пользователя: example.com/mymodules/module1 module1/v1.2.3

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


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

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