в предыдущем постестатьяПредставлено несколько способов настройки среды 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