En introduktion til dep: Sådan styres dine Golang-projektafhængigheder

Opdatering @ 2018–11–26: Teknologien bevæger sig ikke kun i en voldsom hastighed, men ændrer sig også hurtigt. Inden for et år er denne artikel OUTDATED!

Og ifølge dep-projektsiden:

dep var det "officielle eksperiment." Go-værktøjskæden har fra 1.11 (eksperimentelt) vedtaget en tilgang, der afviger skarpt fra dep. Som et resultat fortsætter vi udviklingen af ​​dep, men arbejder primært mod udviklingen af ​​en alternativ prototype til versioneringsadfærd i værktøjskæden.

For mere information om den nye Go-indbyggingsadministration henvises til de officielle GitHub Wiki - Go 1.11-moduler.

Tak John Arundel @bitfield og Erhan Yakut @ yakuter for at afsløre problemet. ?

-

Opdatering @ 2018–02–03: Sam Boyer fra godep-teamet har afklaret nogle forkerte oplysninger i denne artikel. Jeg undskylder over for Sam Boyer og læserne for ulejligheden. ?

-

Tidligere sendte jeg en artikel om afhængighedsstyring i Go ved hjælp af Glide. Jeg fik en feedback om, at Glide bliver forældet. Glide-teamet foreslår, at brugerne flytter til et andet værktøj til afhængighedsstyring kaldet dep skrevet af Golang-teamet.

Go-samfundet har nu dep-projektet til at styre afhængigheder. Overvej at prøve at migrere fra Glide til dep. Glide vil fortsat være understøttet i nogen tid, men anses for at være i en tilstand af støtte snarere end aktiv funktionudvikling.

Der er en plan om at integrere dep i værktøjskæden i Go 1.10-udgivelsen, men ser ud til at den stadig har en vej at gå.

Opdater @ 2018–02–03:

  • dep frigives officielt.
  • dep bevæger sig ikke ind i værktøjskæden med 1.10. Se køreplanen for de nyeste oplysninger.

Opret projektet i $ GOPATH

Projektmappen skal være inde i $ GOPATH for at løse Gopackage-stierne. Lad os oprette et nyt projekt på $ GOPATH / src / gitlab.com / ykyuen / dep-eksempel og tilføje følgende fil.

main.go

Dep måde

Gopkg.toml og Gopkg.lock

dep læser to filer kaldet Gopkg.toml og Gopkg.lock . Lad os initialisere disse 2 filer ved hjælp af kommandoen dep init .

[[email protected] 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

Som du kan se, scanner kommandoen dep init kildekoder og downloader alle de pakker, der er nødvendige for projektet, i leverandørmappen .

Den Gopkg.lock tjener nøjagtig den samme funktion som glide.lock fil. Det låser versionen af ​​pakkerne Bortset fra at versionen skal opretholdes i Gopkg.toml . Kort sagt genereres Gopkg.lock- filen automatisk, og det afhænger af importudtalelserne i kildeversionen, der kontrolleres af Gopkg.toml .

Opdater afhængigheds version

Lad os redigere Gopkg.toml og bruge en lidt ældre version af go- humanize -pakken i stedet for den seneste masterfilial.

Kør derefter dep sikre for at opdatere pakken til den ønskede version. Følgende er forskellen på den opdaterede Gopkg.lock .

Tilføj en ny afhængighed

Ny pakke kunne tilføjes ved hjælp af kommandoen dep sikre -add .

[[email protected] 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/.

Nu har vi den nye regnskabspakke klar i leverandørmappen med nye begrænsninger skrevet til Gopkg.toml og låst i Gopkg.lock . Lad os opdatere main.go som følger.

main.go

Og kør det.

[[email protected] 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

Problemet med git submodule

En stor forskel på dep sammenlignet med Glide er, at pakkens undermodul ignoreres. For eksempel, efter tilføjelse af go-goracle / goracle-pakken ved dep, er odpi-undermodulen indeni tom og fører til fejl. Årsagen til at droppe undermodulen kunne findes på følgende link.

  • Er der planer om at tilføje understøttelse af Git-undermoduler?

Opdater @ 2018–02–03:

Afsnittet om Git-undermoduler er forkert.

Sam Boyer skrev:

dep skal være helt fint ved at trække git-undermoduler ind i det tilfælde, du beskriver. Jeg replikerede lige det, du beskriver her lokalt, og problemet er ikke undermoduler - det er, at der ikke er nogen Go-kode i github.com/go-goracle/goracle/odpi, så den kan ikke importeres direkte. Du er sandsynligvis nødt til at slukke for ubrugte pakker, der beskærer i Gopkg.toml specifikt for det pågældende projekt, da det ellers vil sikre, at automatisk fjerner det, der ser ud til at være et ubrugt direkte (men det ser ud til, at det faktisk bruges af cgo).

Opdater @ 2018–03–04:

Det konstateres, at go-goracle / goracle-pakken ikke fungerer med dep. Du kan følge nedenstående problem og kontrollere den seneste opdatering fra dep-teamet.

  • Kunne ikke få git-undermodul af en pakke efter kommandoen dep sikre

Resumé

  • 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̶̵̶r̶̵̶o̶̵̶j̶̵̶e̶̵̶c̶̵̶t̶̵̶,̶̵̶ ̶̵̶d̶̵̶e̶̵̶p̶̵̶ ̶̵̶i̶̵̶s̶̵̶ ̶̵̶g̶̵̶o̶̵̶o̶̵̶d̶̵̶ ̶̵̶t̶̵̶o̶̵̶ ̶̵̶g̶̵̶o̶̵̶.̶̵̶
  • Hvis du bruger Glide i en tidligere national ̶p̶r̶o̶j̶e̶c̶t̶.̶ du kunne overveje at migrere til dep men jeg tror, ​​der er ingen skade til at holde bruge Glide et øjeblik, indtil dep er officielt ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • Hertil kommer, ̶ mangler ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ undermodul kan resultere i fejl i ̶c̶o̶d̶e̶.̶
  • dep frigives officielt.
  • dep fungerer godt ved at trække git-undermodul.
  • Brug standardbiblioteket, hvor det er muligt. (Foreslået af philoserf)
  • Du kan tjekke dette eksempel på gitlab.com.

- Oprindeligt sendt på Boatswain Blog.