Въведение към dep: Как да управлявате вашите зависимости от проекта Golang

dep - инструмент за управление на зависимости Go

Актуализация @ 2018–11–26: Технологията не се движи само с изключителна скорост, но и се променя бързо. В рамките на една година тази статия е ИЗКЛЮЧЕНА!

И според страницата на проекта на dep:

dep беше „официалният експеримент.“ Веригата инструменти Go от 1.11 е (експериментално) възприе подход, който рязко се разминава с dep. В резултат на това ние продължаваме развитието на dep, но работим предимно за разработването на алтернативен прототип за версия на поведението в инструменталната верига.

За повече информация относно новото управление за вграждане на Go, моля, вижте официалните модули на GitHub Wiki - Go 1.11.

Благодаря на Джон Арундел @bitfield и Ерхан Якут @yakuter за разкриването на проблема.

-

Актуализация @ 2018–02–03: Сам Бойър от екипа на godep изясни някои неточна информация в тази статия. Извинявам се на Сам Бойер и читателите за евентуално неудобство.

-

Преди това публикувах статия за управлението на зависимостите в Go using Glide. Получих обратна връзка, че Glide ще остарее. Екипът на Glide предлага на потребителите да преминат към друг инструмент за управление на зависимости, наречен dep, написан от екипа на Golang.

Общността Go вече има проекта dep за управление на зависимости. Моля, помислете за опит да мигрирате от Glide към dep. Glide ще продължи да се поддържа известно време, но се смята, че е в състояние на подкрепа, а не активно развитие на функциите.

Има план за интегриране на dep в веригата с инструменти в изданието Go 1.10, но изглежда, че все още има път.

Актуализация @ 2018–02–03:

  • dep официално е освободен.
  • dep не се движи в инструменталната верига с 1.10. моля, обърнете се към пътната карта за най-новата информация.
А аз просто не съм достатъчно бърз.

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

Папката на проекта трябва да бъде вътре в $ GOPATH, за да разреши пътищата на Gopackage. Нека създадем нов проект в пример $ GOPATH / src / gitlab.com / ykyuen / dep и добавете следния файл.

main.go

Деп пътя

Gopkg.toml и Gopkg.lock

dep чете два файла, наречени Gopkg.toml и Gopkg.lock. Нека инициализираме тези 2 файла с помощта на командата dep init.

[ykyuen @ camus dep-example] $ dep init
  Използване на master като ограничение за директно dep github.com/dustin/go-humanize
  Заключване в master (bb3d318) за директен dep github.com/dustin/go-humanize

Както можете да видите, командата dep init сканира изходните кодове и изтегля всички пакети, необходими за проекта, в папката на доставчика.

Gopkg.lock изпълнява абсолютно същата функция като файла glide.lock. Той заключва версията на пакетите, ОСНОВНО версията трябва да се поддържа в Gopkg.toml. Накратко, файлът Gopkg.lock се генерира автоматично и зависи от извлеченията за импортиране в изходната версия, контролирана от Gopkg.toml.

Актуализирайте версията на зависимостта

Нека редактираме Gopkg.toml и използваме малко по-стара версия на пакета go-humanize вместо най-новия главен клон.

След това стартирайте dep гарантирайте, че актуализирате пакета до желаната версия. Следва разликата на актуализирания Gopkg.lock.

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

Нов пакет може да бъде добавен с помощта на командата dep secure -add.

[ykyuen @ camus dep-example] $ dep secure -add github.com/leekchan/accounting
Извличане на източници ...
„github.com/leekchan/accounting“ не се импортира от вашия проект и временно е добавен към Gopkg.lock и доставчик /.
Ако стартирате отново „dep secure“, преди действително да го импортирате, той ще изчезне от Gopkg.lock и доставчик /.

Сега вече имаме готов новия счетоводен пакет в папката на доставчика с нови ограничения, написани на Gopkg.toml и заключени в Gopkg.lock. Нека актуализираме main.go, както следва.

main.go

И го пусни.

[ykyuen @ camus dep-example] $ go run main.go
Здравей свят
Този файл е 83 MB.
Ти си моя 193-ти най-добър приятел.
Дължите 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 вътре е празен и води до грешка. Причината за отпадането на подмодула може да се намери на следния линк.

  • Има ли планове за добавяне на поддръжка на Git подмодули?

Актуализация @ 2018–02–03:

Параграфът за подмодулите на Git е неправилен.

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

dep трябва да е напълно добре при издърпване на git подмодули в описания от вас случай. Просто репликирах това, което описвате тук локално и проблемът не е в подмодулите - това е, че няма Go код в github.com/go-goracle/goracle/odpi, така че не може да бъде импортиран директно.
Вероятно ще трябва да изключите резитбата на неизползвани пакети в Gopkg.toml специално за този проект, тъй като в противен случай dep secure автоматично ще премахне това, което изглежда е неизползвано директно (но изглежда, че всъщност се използва от cgo).

Актуализация @ 2018–03–04:

Установено е, че пакетът go-goracle / goracle не работи с dep. Можете да следвате проблема по-долу и да проверите последната актуализация от екипа на dep.

  • Неуспешно получаване на git подмодул на пакет след командата dep secure

резюме

  • DEP е доста вероятно да бъде на официалния зависимост инструмент за управление в ̶̵̶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̶̵̶r̶̵̶o̶̵̶j̶̵̶e̶̵̶c̶̵̶t̶̵̶, ̶̵̶ ̶̵̶d̶̵̶e̶̵̶p̶̵̶ ̶̵̶o̶̵̶̶̵̶ ̶̵̶o̶̵̶̶̵̶̶̵̶
  • Ако използвате Glide в бивша ̶p̶r̶o̶j̶e̶c̶t̶.̶ можете да обмислите преминаване към DEP но мисля, че няма нищо лошо да продължите да използвате Glide за известно време, докато DEP е официално ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • В допълнение, ̶ липсва ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ подмодул може да доведе до неизправност на ̶c̶o̶d̶e̶.̶
  • dep официално е освободен.
  • dep работи добре при издърпване на git подмодул.
  • Използвайте стандартна библиотека, когато е възможно. (Предложено от philoserf)
  • Можете да проверите този пример на gitlab.com.

- Първоначално публикуван в Блог Boatswain.