Инструмент управления пакетами Go (2): glide

задняя часть Go

в предыдущем постестатьяПредставлено несколько способов настройки среды Go и управления пакетами. Управление пакетами в Go всегда подвергалось критике.Начиная с механизма поставщика, представленного в Go 1.5, квазиофициального отдела инструментов, и заканчивая модулями Go в Go 1.5, пока нет простого решения. Эта статья познакомитglide

скольжение выходит после вендора. Информация о зависимых пакетах glide находится в glide.yaml и glide.lock, первый записывает все зависимые пакеты, последний записывает информацию о версии зависимых пакетов.

Принцип работы

Glide сканирует исходный код приложения или библиотеки, чтобы определить необходимые зависимости. Чтобы определить версии и местоположения (например, псевдонимы для вилок), Glide читает файл glide.yaml с помощью правил. С помощью этой информации Glide извлечет необходимые зависимости.

Когда встречается зависимый пакет, его импорт сканируется для определения его зависимостей (транзитивных зависимостей). Если зависимый проект включает файл glide.yaml, эта информация используется для определения правил зависимости при выборке из местоположения или используемой версии. Также импортируются конфигурации для Godep, GB, GOM и GPM. Зависимости будут экспортированы в verdor. Сгенерированный файл glide.lock со всеми зависимостями, включая транзитивные зависимости.

установить скольжение

Его можно установить через скрипт:

curl https://glide.sh/get | sh

После выполнения будет установлена ​​последняя версия релиза. На Mac вы также можетеbrew install glideУстановить.

$ glide -v
glide version v0.13.2

0.13.2это последняя версия.

инициализировать скольжение

Сначала нужно войти в проект в GOPATH,

cd $GOPATH/src/go-web-practice

инициализация

$ glide create
[INFO]	Generating a YAML configuration file and guessing the dependencies
[INFO]	Attempting to import from other package managers (use --skip-import to skip)
[INFO]	Scanning code to look for dependencies
[INFO]	--> Found reference to github.com/Masterminds/semver
[INFO]	--> Found reference to github.com/Masterminds/vcs
[INFO]	--> Found reference to github.com/codegangsta/cli
[INFO]	--> Found reference to gopkg.in/yaml.v2
[INFO]	Writing configuration file (glide.yaml)
[INFO]	Would you like Glide to help you find ways to improve your glide.yaml configuration?
[INFO]	If you want to revisit this step you can use the config-wizard command at any time.
[INFO]	Yes (Y) or No (N)?
n
[INFO]	You can now edit the glide.yaml file. Consider:
[INFO]	--> Using versions and ranges. See https://glide.sh/docs/versions/
[INFO]	--> Adding additional metadata. See https://glide.sh/docs/glide.yaml/
[INFO]	--> Running the config-wizard command to improve the versions in your configuration

выполнить инициализацию,glide.yamlЗаписывает список зависимых пакетов и правила их обновления при каждом выполнении.glide up, новая версия будет загружена по заданным правилам. Создано по авторскому примеру нижеglide.yaml.

package: gowebpractice
import:
- package: github.com/coocood/freecache
- package: github.com/Masterminds/cookoo
  version: ^1.2.0
  repo: git@github.com:Masterminds/cookoo.git
- package: golang.org/x/crypto
testImport:
- package: github.com/smartystreets/goconvey
  subpackages:
  - convey

существуетglide.yamlсделал две вещи:

  • Именованная текущая регистрация
  • объявленные внешние зависимости

Первый импорт библиотеки, иллюстрирующий импорт минимального пакета, предоставляет полный путь импорта. Когда Glide считывает определение второй библиотеки, он извлекает его из источников в репозитории, проверяет последнюю версию между 1.2.0 и 2.0.0 и помещает ее в папку vendor/ на github.com/Masterminds/cookoo.

структура проекта

- $GOPATH/src/myProject
  |
  |-- glide.yaml
  |
  |-- glide.lock
  |
  |-- main.go
  |
  |-- mySubpackage
  |    |
  |    |-- foo.go
  |
  |-- vendor
       |-- github.com
            |
            |-- Masterminds
                  |
                  |-- ... etc.

Установить зависимости

glide install

Приведенная выше команда установит версию, указанную в файле glide.lock, пропустит сканирование и выполнит обновление, если только файл glide.lock не будет найден.

Скачать зависимости напрямую

glide get

В дополнение к автоматическому разрешению импорта из кода, glide также может напрямую загружать зависимости, которых нет в коде, с помощью glide get, что в основном совпадает с использованием go get.

обновить зависимости

glide up

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

использовать зеркало

при загрузкеgolang.org/x/crypto, потому что адрес заблокирован, в результате чегоUpdate failed for golang.org/x/crypto: Cannot detect VCS. В это время вы можете использовать функцию скользящего зеркала, настроить URL-адрес, который можно загрузить, или сопоставить с локальным складом. Сопоставьте golang.org с github:

$ glide mirror set golang.org/x/crypto github.com/golang/crypto

[INFO]    golang.org/x/crypto being set to github.com/golang/crypto
[INFO]    mirrors.yaml written with changes

Установите снова, чтобы быть успешным. Из приведенного выше вывода также видно, что выполнениеglide mirrorКогда конфигурация зеркала записывается в$HOME/.glide/mirrors.yaml, Открой это. Ниже приведена авторская конфигурация планирующего зеркала:

repos:
- original: https://golang.org/x/crypto
  repo: https://github.com/golang/crypto
  vcs: git
- original: https://golang.org/x/crypto/acme/autocert
  repo: https://github.com/golang/crypto
  vcs: git
- original: https://golang.org/x/image
  repo: https://github.com/golang/image
  vcs: git
- original: https://golang.org/x/mobile
  repo: https://github.com/golang/mobile
  vcs: git
- original: https://golang.org/x/net
  repo: https://github.com/golang/net
  vcs: git
- original: https://golang.org/x/net/context
  repo: https://github.com/golang/net
  base: golang.org/x/net
  vcs: git
- original: https://golang.org/x/net/html
  repo: https://github.com/golang/net
  base: golang.org/x/net
  vcs: git
- original: https://golang.org/x/sys
  repo: https://github.com/golang/sys
  vcs: git
- original: https://golang.org/x/sys/unix
  repo: https://github.com/golang/sys
  base: golang.org/x/sys
  vcs: git
- original: https://golang.org/x/text
  repo: https://github.com/golang/text
  vcs: git
- original: https://golang.org/x/tools
  repo: https://github.com/golang/tools
  vcs: git

Вы можете перейти на https://www.golangtc.com/download/package, чтобы загрузить дополнительные библиотеки Golang.

резюме

Преимущество использования glide в том, что каждый проект использует свой независимый пакет, а версию пакета можно хорошо контролировать, что особенно важно при командной разработке. По сравнению с упомянутыми выше godep, dep и govendor, glide не ставит зависимые пакеты в GOPATH, поэтому создание новой директории занимает больше времени, но вы также можете вручную копировать пакеты в vendor.Вы можете учитывать эту функцию при ее использовании. плюсы и минусы.

Рекомендуемое чтение

Инструмент управления пакетами для Go

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

微信公众号

Ссылаться на

  1. glide docs
  2. Инструмент управления зависимостями Golang: переход от начального уровня к профессиональному использованию