Как управлять зависимостями проекта Golang

1656685448 kak upravlyat zavisimostyami proekta golang

от Ying Kit Yuen

1*nPaOoEou7T-cM9WZGtU-gg
dep — инструмент управления зависимостями Go

Обновление @ 2018–11–26: Технологии не только двигаются с бешеной скоростью, но и быстро меняются. Через год эта статья устарела!

И согласно странице проекта департамента:

dep являлся «официальным экспериментом». Цепочка инструментов Go, по состоянию на 1.11, (экспериментально) применила подход, резко отличающийся от dep. В результате мы продолжаем разработку dep, но сосредотачиваем работу в основном на разработке альтернативного прототипа для поведения управления версиями в инструментальной цепочке.

Для получения более подробной информации о новом управлении встроенным модулем Go обратитесь к официальному Wiki GitHub — модулю Go 1.11.

Спасибо Джону Арунделу @bitfield и Эрхану Якуту @yakuter за раскрытие проблемы. ?

Обновление @ 2018–02–03: Сэм Бойер из команды godep разъяснил некоторую неправильную информацию в этой статье. Я прошу прощения у Сэма Боера и читателей за возможные неудобства. ?

Ранее я публиковал статью об управлении зависимостями в Go с помощью Glide. Я получил отклик, что Glide устареет. Команда Glide предлагает пользователям перейти к другому инструменту управления зависимостями под названием dep, написанному командой Golang.

Сообщество Go теперь имеет проект dep для управления зависимостями. Попытайтесь перейти с Glide на dep. Glide будет некоторое время поддерживаться, но считается, что он находится в состоянии поддержки, а не в активной разработке функций.

Существует план интеграции dep в цепочку инструментов в выпуске Go 1.10, но, кажется, это все еще есть.

Обновление @ 2018–02–03:

  • зам выходит официально.
  • зам не переходит в инструментарий с 1.10. Пожалуйста, обратитесь к дорожной карте, чтобы получить последнюю информацию.
1*-jTtAekDfSoJn1uDzeyFVg
И я просто недостаточно скор. ?

Создайте проект в $GOPATH

Папка проекта должна быть внутри $GOPATH чтобы решить пути Gopackage. Давайте создадим новый проект по адресу $GOPATH/src/gitlab.com/ykyuen/dep-example и добавьте следующий файл.

main.go

Деп путь

Gopkg.toml и Gopkg.lock

dep читает два файла под названием Gopkg.toml и Gopkg.lock. Давайте инициализируем эти 2 файла с помощью деп иниц команда.

[ykyuen@camus dep-example]$ dep init  Using master as constraint for direct dep github.com/dustin/go-humanize  Locking in master (bb3d318) for direct dep github.com/dustin/go-humanize

Как видите, деп иниц команда сканирует исходные коды и загружает все пакеты, необходимые для проекта, поставщик папку.

The Gopkg.lock выполняет ту же функцию, что и glide.lock файл. Он блокирует версии пакетов КРОМ версия должна поддерживаться в Gopkg.toml. Короче говоря, Gopkg.lock файл создается автоматически и зависит от импорт операторы в исходной версии, управляемые Gopkg.toml.

1*4rou4TKFvTSHxo_OSLp4jg

Обновить версию зависимости

Давайте отредактируем Gopkg.toml и используйте немного более старую версию пакета go-humanize вместо последней главной ветви.

Тогда беги деп обеспеч чтобы обновить пакет до нужной версии. Ниже приведена разница обновленного Gopkg.lock.

Добавьте новую зависимость

Новый пакет можно добавить с помощью деп обеспечить -доп команда.

[ykyuen@camus dep-example]$ dep ensure -add github.com/leekchan/accountingFetching sources...
"github.com/leekchan/accounting" is not imported by your project, and has been temporarily added to Gopkg.lock and vendor/.If you run "dep ensure" again before actually importing it, it will disappear from Gopkg.lock and vendor/.

Теперь у нас есть новое учет упаковка готова в поставщик папка с новыми ограничениями, записанными в Gopkg.toml и закрыто Gopkg.lock. Давайте обновим main.go следующим образом.

main.go

И запустите его.

[ykyuen@camus dep-example]$ go run main.gohello worldThat file is 83 MB.You're my 193rd best friend.You owe $6,582,491.$123,456,789.21$12,345,678.00$25,925,925.67-$25,925,925.67$123,456,789.21

Проблема с подмодулем git

Одним из основных отличий dep от Glide является то, что подмодуль пакета игнорируется. Например, после добавления пакета go-goracle/goracle с помощью dep, подмодуль odpi внутри пуст и приводит к ошибке. Причину удаления подмодуля можно найти по следующей ссылке.

Обновление @ 2018–02–03:

Параграф о подмодулях Git неверен.

Сэм Боер написал:

В случае, который вы описываете, dep должно отлично справляться с подтягиванием подмодулей git. Я только что скопировал то, что вы описываете здесь локально, и проблема заключается не в подмодулях — а в том, что на github.com/go-goracle/goracle/odpi нет кода Go, поэтому его нельзя импортировать напрямую.

Вероятно, вам нужно отключить сокращение неиспользованных пакетов в Gopkg.toml специально для этого проекта, иначе dep secure автоматически удалит то, что кажется неиспользованным напрямую (но кажется, что это действительно используется cgo).

Обновление @ 2018–03–04:

Установлено, что пакет go-goracle/goracle не работает с dep. Вы можете следить за проблемой ниже и проверять последние обновления от команды заместителя.

Резюме

  • d̶̵̶e̶̵̶p̶̵̶ ̶̵̶i̶̵̶s̶̵̶ ̶̵̶q̶̵̶u̶̵̶i̶̵̶t̶̵̶e̶̵̶ ̶̵̶l̶̵̶i̶̵̶k̶̵̶e̶̵̶l̶̵̶y̶̵̶ ̶̵̶t̶̵̶o̶̵̶ ̶̵̶b̶̵̶e̶̵̶ ̶̵̶t̶̵̶h̶̵̶e̶̵̶ ̶̵̶o̶̵̶f̶̵̶f̶̵̶i̶̵̶c̶̵̶i̶̵̶a̶̵̶l̶̵̶ ̶̵̶d̶̵̶e̶̵̶p̶̵̶e̶̵̶n̶̵̶d̶̵̶e̶̵̶n̶̵̶c̶̵̶y̶̵̶ ̶̵̶m̶̵̶a̶̵̶n̶̵̶a̶̵̶g̶̵̶e̶̵̶m̶̵̶e̶̵̶n̶̵̶t̶̵̶ ̶̵̶t̶̵̶o̶̵̶o̶̵̶l̶̵̶ ̶̵̶i̶̵̶n̶̵̶ ̶̵̶t̶̵̶h̶̵̶e̶̵̶ ̶̵̶G̶̵̶o̶̵̶l̶̵̶a̶̵̶n̶̵̶g̶̵̶ ̶̵̶c̶̵̶o̶̵̶m̶̵̶m̶̵̶u̶̵̶n̶̵̶i̶̵̶t̶̵̶y̶̵̶.̶̵̶
  • I̶̵̶f̶̵̶ ̶̵̶y̶̵̶o̶̵̶u̶̵̶ ̶̵̶a̶̵̶r̶̵̶e̶̵̶ ̶̵̶s̶̵̶t̶̵̶a̶̵̶r̶̵̶t̶̵̶i̶̵̶n̶̵̶g̶̵̶ ̶̵̶a̶̵̶ ̶̵̶n̶̵̶e̶̵̶w̶̵̶ ̶̵̶g̶̵̶o̶̵̶l̶̵̶a̶̵̶n̶̵̶g̶̵̶ ̶̵̶p̶̵̶o̶̵̶je̶̵̶c̶̵̶t̶̵̶, ̶̵̶ ̶̵̶d̶̵̶ ̶̵̶
  • I̶f̶ ̶y̶o̶u̶ ̶a̶r̶e̶ ̶u̶s̶i̶n̶g̶ ̶G̶l̶i̶d̶e̶ ̶i̶n̶ ̶a̶ ̶l̶e̶g̶a̶c̶y̶ ̶p̶r̶o̶j̶e̶c̶t̶.̶ ̶Y̶o̶u̶ ̶c̶o̶u̶l̶d̶ ̶c̶o̶n̶s̶i̶d̶e̶r̶ ̶m̶i̶g̶r̶a̶t̶i̶n̶g̶ ̶t̶o̶ ̶d̶e̶p̶ ̶b̶u̶t̶ ̶i̶ ̶t̶h̶i̶n̶k̶ ̶t̶h̶e̶r̶e̶ ̶i̶s̶ ̶n̶o̶ ̶h̶a̶r̶m̶ ̶t̶o̶ ̶k̶e̶e̶p̶ ̶u̶s̶i̶n̶g̶ ̶G̶l̶i̶d̶e̶ ̶f̶o̶r̶ ̶a̶ ̶w̶h̶i̶l̶e̶ ̶u̶n̶t̶i̶l̶ ̶d̶e̶p̶ ̶i̶s̶ ̶o̶f̶f̶i̶c̶i̶a̶l̶l̶y̶ ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • I̶n̶ ̶a̶d̶d̶i̶t̶i̶o̶n̶,̶ ̶m̶i̶s̶s̶i̶n̶g̶ ̶p̶a̶c̶k̶a̶g̶e̶’̶s̶ ̶s̶u̶b̶m̶o̶d̶u̶l̶e̶ ̶m̶a̶y̶ ̶r̶e̶s̶u̶l̶t̶ ̶i̶n̶ ̶m̶a̶l̶f̶u̶n̶c̶t̶i̶o̶n̶ ̶o̶f̶ ̶y̶o̶u̶r̶ ̶c̶o̶d̶e̶.̶
  • зам выходит официально.
  • зам хорошо работает при извлечении подмодуля git.
  • Используйте стандартную библиотеку, где это возможно. (Предложено philoserf)
  • Этот пример можно просмотреть на gitlab.com.

— Сначала размещен на блоге Boatswain.

Добавить комментарий

Ваш адрес email не будет опубликован.