O introducere de dep: Cum să gestionați dependențele proiectului Golang

dep - Un instrument de gestionare a dependenței Go

Actualizare @ 2018–11–26: Tehnologia nu se mișcă doar cu o viteză de vârf, ci se schimbă rapid. În decurs de un an, acest articol este EXECUTAT!

Și conform paginii proiectului dep:

dep a fost „experimentul oficial”. Tabelul cu instrumente Go, de la 1.11, a adoptat (experimental) o abordare care se abate de la dep. Drept urmare, continuăm dezvoltarea dep, dar lucrăm în primul rând spre dezvoltarea unui prototip alternativ pentru modelarea comportamentului în cablul de instrumente.

Pentru mai multe informații despre noul management integrat Go, consultați modulele oficiale GitHub Wiki - Go 1.11.

Mulțumesc lui John Arundel @bitfield și Erhan Yakut @yakuter pentru dezvăluirea problemei.

-

Actualizare @ 2018–02–03: Sam Boyer de la echipa evlaviilor a clarificat câteva informații incorecte din acest articol. Îmi cer scuze lui Sam Boyer și cititorilor pentru orice inconvenient.

-

Anterior, am postat un articol despre managementul dependenței în Go folosind Glide. Am primit un feedback potrivit căruia Glide va deveni învechită. Echipa Glide sugerează utilizatorilor să se mute la un alt instrument de gestionare a dependenței numit dep scris de echipa Golang.

Comunitatea Go are acum proiectul dep pentru gestionarea dependențelor. Vă rugăm să încercați să încercați să migrați de la Glide la dep. Glide va fi susținut în continuare timp de ceva timp, dar este considerat a fi într-o stare de sprijin, mai degrabă decât dezvoltarea activă a funcțiilor.

Există un plan despre integrarea dep-ului în cablul de instrumente în versiunea Go 1.10, dar se pare că mai are un drum de parcurs.

Actualizare @ 2018–02–03:

  • dep este eliberat oficial.
  • dep nu se deplasează în cablul de instrumente cu 1.10. vă rugăm să consultați foaia de parcurs pentru cele mai recente informații.
Și nu sunt suficient de rapid.

Creați proiectul în interiorul $ GOPATH

Dosarul proiectului trebuie să se afle în $ GOPATH pentru a rezolva căile Gopackage. Să creăm un nou proiect la $ GOPATH / src / gitlab.com / ykyuen / dep-exemplu și să adăugăm următorul fișier.

main.go

Modul dep

Gopkg.toml și Gopkg.lock

dep citește două fișiere numite Gopkg.toml și Gopkg.lock. Inițializăm aceste 2 fișiere folosind comanda dep init.

[ykyuen @ camus dep-exemplu] $ dep init
  Utilizarea master ca restricție pentru dep direct direct github.com/dustin/go-humanize
  Blocare în master (bb3d318) pentru dep direct direct github.com/dustin/go-humanize

După cum vedeți, comanda dep init scanează codurile sursă și descarcă toate pachetele necesare proiectului în folderul furnizor.

Gopkg.lock servește exact aceeași funcție ca fișierul glide.lock. Încuiește versiunea pachetelor EXCEPȚI versiunea trebuie menținută în Gopkg.toml. Pe scurt, fișierul Gopkg.lock este generat automat și depinde de declarațiile de import din versiunea sursă controlată de Gopkg.toml.

Actualizați versiunea dependenței

Edităm Gopkg.toml și folosim o versiune ceva mai veche a pachetului go-umanize în loc de cea mai recentă ramură principală.

Apoi rulați dep asigurați-vă să actualizați pachetul la versiunea dorită. Următoarea este diferența Gopkg.lock actualizată.

Adăugați o nouă dependență

Un nou pachet ar putea fi adăugat folosind comanda dep assure -add.

[ykyuen @ camus dep exemplu) $ dep asigură -add github.com/leekchan/accounting
Obținerea surselor ...
„github.com/leekchan/accounting” nu este importat de proiectul dvs. și a fost adăugat temporar la Gopkg.lock și furnizor /.
Dacă rulați „dep asigura” din nou înainte de a-l importa efectiv, acesta va dispărea de la Gopkg.lock și furnizor /.

Acum avem noul pachet de contabilitate pregătit în folderul furnizor, cu noi constrângeri scrise în Gopkg.toml și blocate în Gopkg.lock. Actualizăm principalul.go după cum urmează.

main.go

Și aleargă-l.

[ykyuen @ camus dep-exemplu] $ go run main.go
Salut Lume
Acest fișier este de 83 MB.
Ești al meu 193 cel mai bun prieten.
Datoriți 6.552.491 de dolari.
$ 123,456,789.21
$ 12,345,678.00
$ 25,925,925.67
- $ 25,925,925.67
$ 123,456,789.21

Problema cu submodulul git

O diferență majoră de dep comparativ cu Glide este submodulul pachetului este ignorat. De exemplu, după adăugarea pachetului go-goracle / goracle prin dep, submodulul odpi din interior este gol și duce la eroare. Motivul pentru căderea submodulului poate fi găsit la următorul link.

  • Există vreun plan pentru a adăuga suport pentru submodulele Git?

Actualizare @ 2018–02–03:

Paragraful despre submodulele Git este incorect.

Sam Boyer a scris:

dep ar trebui să fie perfect bine pentru a trage în submodule git în cazul în care descrieți. Tocmai am replicat ceea ce descriți aici local, iar problema nu este submodulă - este că nu există cod Go în github.com/go-goracle/goracle/odpi, deci nu poate fi importat direct.
Probabil că trebuie să dezactivați tăierea pachetelor neutilizate în Gopkg.toml pentru proiectul respectiv, deoarece altfel dep asigurați va elimina automat ceea ce pare a fi un neutilizat direct (dar se pare că este folosit efectiv de cgo).

Actualizare @ 2018–03–04:

S-a constatat că pachetul go-goracle / goracle nu funcționează cu dep. Ați putea urmări problema de mai jos și verificați cea mai recentă actualizare de la echipa de dep.

  • Nu reușește să primești submodulul git al unui pachet după comanda dep

rezumat

  • Dep Este cel mai probabil a fi oficiale pentru Dependență Management Toole în ̶̵̶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̶̵̶ ̶̵̶i ̶̵̶o ̶̵̶o̶̵̶
  • Dacă utilizați Glide într-o LEGACY ̶p̶r̶o̶j̶e̶c̶t̶.̶ vă recomandăm să migrați de a Dep dar cred că atunci se poate a utiliza în continuare Glide pentru un timp, până la Dep ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶ oficial
  • În plus, ̶ Missing ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ Submodule poate duce la funcționarea necorespunzătoare a ̶c̶o̶d̶e̶.̶-ul
  • dep este eliberat oficial.
  • dep funcționează bine la tragerea submodulului git.
  • Utilizați biblioteca standard acolo unde este posibil. (Sugerit de philoserf)
  • Puteți consulta acest exemplu pe gitlab.com.

- Postat inițial pe Boatswain Blog.