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

Модули в Golang: команды с поддержкой модулей, go mod edit

Использование:

go mod edit [editing flags] [-fmt|-print|-json] [go.mod]

Пример:

# Добавить директиву replace.
$ go mod edit -replace example.com/a@v1.0.0=./a

# Удалить директиву replace.
$ go mod edit -dropreplace example.com/a@v1.0.0

# Установить версию go, добавить требование и распечатать файл
# вместо записи на диск.
$ go mod edit -go=1.14 -require=example.com/m@v1.0.0 -print

# Отформатировать файл go.mod.
$ go mod edit -fmt

# Отформатировать и распечатать другой файл .mod.
$ go mod edit -print tools.mod

# Распечатать JSON-представление файла go.mod.
$ go mod edit -json

Команда go mod edit предоставляет интерфейс командной строки для редактирования и форматирования файлов go.mod для использования в основном инструментами и скриптами. go mod edit читает только один файл go.mod; он не ищет информацию о других модулях. По умолчанию go mod edit читает и записывает файл go.mod основного модуля, но после флагов редактирования можно указать другой целевой файл.

Флаги редактирования определяют последовательность операций редактирования.

  • Флаг -module изменяет путь к модулю (строка module файла go.mod).
  • Флаг -go=version устанавливает ожидаемую языковую версию Go.
  • Флаги -require=path@version и -droprequire=path добавляют и удаляют требование для указанного пути и версии модуля. Обратите внимание, что -require отменяет все существующие требования к пути. Эти флаги в основном предназначены для инструментов, которые понимают граф модуля. Пользователи должны предпочесть go get path@version или go get path@none, которые вносят другие корректировки go.mod по мере необходимости, чтобы удовлетворить ограничения, налагаемые другими модулями.
  • Флаги -exclude=path@version и -dropexclude=path@version добавляют и удаляют исключение для данного пути и версии модуля. Обратите внимание, что -exclude=path@version нельзя использовать, если это исключение уже существует.
  • Флаг -replace=old[@v]=new[@v] добавляет замену данной пары пути и версии модуля. Если @v в old@v опущен, добавляется замена без версии в левой части, которая применяется ко всем версиям старого пути к модулю. Если @v в new@v опущен, новый путь должен быть корневым каталогом локального модуля, а не путем к модулю. Обратите внимание, что -replace отменяет любые избыточные замены для old[@v], поэтому отсутствие @v приведет к удалению замен для определенных версий.
  • Флаг -dropreplace=old[@v] отменяет замену указанной пары пути и версии модуля. Если указан @v, замена данной версией отбрасывается. Существующая замена без версии с левой стороны может заменить модуль. Если @v опущен, замена без версии отбрасывается.
  • Флаги -retract=version и -dropretract=version добавляют и удаляют отзыв (retraction) для данной версии, который может быть отдельной версией (например, v1.2.3) или интервалом (например, [v1.1.0, v1.2.0]). Обратите внимание, что флаг -retract не может добавлять поясняющий комментарий для директивы retract. Рекомендуются пояснительные комментарии, которые можно показать с помощью go list -m -u и других команд.

Флаги редактирования могут повторяться. Изменения применяются в указанном порядке.

go mod edit имеет дополнительные флаги, управляющие его выводом.

  • Флаг -fmt переформатирует файл go.mod без внесения других изменений. Это переформатирование также подразумевается любыми другими модификациями, в которых используется или переписывается файл go.mod. Единственный раз, когда этот флаг необходим, если не указаны другие флаги, как в go mod edit -fmt.
  • Флаг -print печатает окончательный файл go.mod в его текстовом формате вместо того, чтобы записывать его обратно на диск.
  • Флаг -json печатает окончательный файл go.mod в формате JSON вместо того, чтобы записывать его обратно на диск в текстовом формате. Вывод JSON соответствует этим типам Go:

type Module struct {
        Path    string
        Version string
}

type GoMod struct {
        Module  Module
        Go      string
        Require []Require
        Exclude []Module
        Replace []Replace
}

type Require struct {
        Path     string
        Version  string
        Indirect bool
}

type Replace struct {
        Old Module
        New Module
}

type Retract struct {
        Low       string
        High      string
        Rationale string
}

Обратите внимание, что это описывает только сам файл go.mod, а не другие модули, на которые косвенно ссылаются. Чтобы получить полный набор модулей, доступных для сборки, используйте go list -m -json all.

Например, инструмент может получить файл go.mod как структуру данных, проанализировав вывод команды go mod edit -json, а затем может внести изменения, вызвав команду go mod edit с -require, -exclude и т. д.

Инструменты также могут использовать пакет golang.org/x/mod/modfile для анализа, редактирования и форматирования файлов go.mod.


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


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

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