вторник, 23 февраля 2021 г.

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

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

go install [build flags] [packages]

Примеры:

# Установить последнюю версию программы,
# игнорируя go.mod в текущем каталоге (если есть).
$ go install golang.org/x/tools/gopls@latest

# Установить определенную версию программы.
$ go install golang.org/x/tools/gopls@v0.6.4

# Установить программу в версии, 
# выбранной модулем в текущем каталоге.
$ go install golang.org/x/tools/gopls

# Установить все программы в каталог.
$ go install ./cmd/...

Команда go install собирает и устанавливает пакеты, имена которых указаны путями в командной строке. Исполняемые файлы (основные пакеты (main packages)) устанавливаются в каталог, названный переменной среды GOBIN, которая по умолчанию имеет значение $GOPATH/bin или $HOME/go/bin, если переменная среды GOPATH не установлена. Исполняемые файлы в $GOROOT устанавливаются в $GOROOT/bin или $GOTOOLDIR вместо $GOBIN.

Начиная с Go 1.16, если аргументы имеют суффиксы версии (например, @latest или @v1.0.0), go install создает пакеты в режиме с поддержкой модулей, игнорируя файл go.mod в текущем каталоге или любом родительском каталоге, если он есть. Это полезно для установки исполняемых файлов, не влияя на зависимости основного модуля.

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

  • Аргументы должны быть путями пакетов или шаблонами пакетов (с подстановочными знаками "..."). Это не должны быть стандартные пакеты (например, fmt), мета-шаблоны (std, cmd, all) или относительные или абсолютные пути к файлам.
  • Все аргументы должны иметь один и тот же суффикс версии. Запрещены разные запросы, даже если они относятся к одной и той же версии.
  • Все аргументы должны относиться к пакетам в одном модуле одной версии.
  • Ни один модуль не считается основным. Если модуль, содержащий пакеты, названные в командной строке, имеет файл go.mod, он не должен содержать директив (replace и exclude), которые заставили бы его интерпретировать иначе, чем если бы это был основной модуль. Модуль не должен требовать более высокую версию самого себя.
  • Аргументы пути к пакету должны относиться к основным (main) пакетам. Аргументы шаблона будут соответствовать только основным пакетам.

Go 1.15 и ниже не поддерживают использование запросов версии с go install.

Если аргументы не имеют суффиксов версии, go install может выполняться в режиме с поддержкой модулей или в режиме GOPATH, в зависимости от переменной среды GO111MODULE и наличия файла go.mod. Если включен режим с поддержкой модулей, go install запускается в контексте основного модуля, который может отличаться от модуля, содержащего устанавливаемый пакет.


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


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

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