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

Модули в Golang: файл go.mod, пути и версии модулей

Большинство идентификаторов и строк в файле go.mod - это либо пути к модулям, либо их версии.

Путь к модулю должен удовлетворять следующим требованиям:

  • Путь должен состоять из одного или нескольких элементов пути, разделенных косой чертой (/, U+002F). Он не должен начинаться или заканчиваться косой чертой.
  • Каждый элемент пути представляет собой непустую строку, состоящую из букв ASCII, цифр ASCII и ограниченных знаков препинания ASCII (-, ., _ и ~).
  • Элемент пути не может начинаться или заканчиваться точкой ( . , U+002E).
  • Префикс элемента до первой точки не должен быть зарезервированным именем файла в Windows, независимо от регистра (CON, com1, NuL и т. д.).

Если путь к модулю указан в директиве require и не заменяется, или если пути к модулям отображаются справа от директивы replace, команде go может потребоваться загрузить модули с этим путем, и должны быть выполнены некоторые дополнительные требования.

  • Начальный элемент пути (до первой косой черты, если таковая имеется), по соглашению имя домена, должен содержать только строчные буквы ASCII, цифры ASCII, точки ( . , U+002E) и тире ( - , U+002D); он должен содержать хотя бы одну точку и не может начинаться с тире.
  • Для конечного элемента пути в форме /vN, где N выглядит числовым (цифры и точки ASCII), N не должно начинаться с ведущего нуля, не должно быть /v1 и не должно содержать никаких точек.
    • Для путей, начинающихся с gopkg.in/, это требование заменяется требованием, чтобы путь соответствовал соглашениям службы gopkg.in.

Версии в файлах go.mod могут быть каноническими или неканоническими.

Каноническая версия начинается с буквы v, за которой следует семантическая версия, соответствующая спецификации Semantic Versioning 2.0.0.

Большинство других идентификаторов и строк могут использоваться как неканонические версии, хотя есть некоторые ограничения, чтобы избежать проблем с файловыми системами, репозиториями и прокси-модулями. Неканонические версии допускаются только в файле go.mod главного модуля (main module). Команда go попытается заменить каждую неканоническую версию на эквивалентную каноническую версию при автоматическом обновлении файла go.mod.

В тех местах, где путь модуля связан с версией (например, в директивах require, replace и exclude), последний элемент пути должен соответствовать версии.


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


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

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