Įvadas į dep: kaip valdyti savo „Golang“ projekto priklausomybes

Atnaujinimas @ 2018–11–26: technologijos juda ne tik didžiuliu greičiu, bet ir greitai keičiasi. Per metus šis straipsnis pasenęs!

Ir pagal dep projekto puslapį:

dep buvo „oficialus eksperimentas“. „Go“ įrankių grandinė nuo 1.11 (eksperimentiškai) pasirinko požiūrį, kuris smarkiai skiriasi nuo dep. Dėl to mes tęsiame depo plėtrą, tačiau pirmiausia stengiamės sukurti alternatyvų prototipą, skirtą elgesio įrankių grandinėje versijoms.

Norėdami gauti daugiau informacijos apie naują „Go“ integruotą valdymą, žiūrėkite oficialius „GitHub Wiki - Go 1.11“ modulius.

Ačiū Johnui Arundeliui @bitfield ir Erhanui Yakutui @yakuter už problemos atskleidimą. ?

-

Atnaujinimas @ 2018–02–03: Samas Boyeris iš „Godep“ komandos šiame straipsnyje paaiškino neteisingą informaciją. Atsiprašau Samo Boyerio ir skaitytojų už nepatogumus. ?

-

Anksčiau „Go using Glide“ paskelbiau straipsnį apie priklausomybės valdymą. Gavau atsiliepimą, kad „Glide“ bus pasenęs. „Glide“ komanda siūlo vartotojams pereiti prie kito priklausomybės valdymo įrankio, vadinamo „Dep“, kurį parašė „Golang“ komanda.

„Go“ bendruomenė dabar turi „dep“ projektą, skirtą valdyti priklausomybes. Apsvarstykite galimybę pabandyti pereiti iš „Glide“ į „dep.“ Sklandymas kurį laiką bus palaikomas, tačiau laikoma, kad jis yra palaikomas, o ne aktyviai tobulinamas.

Yra planas integruoti „Dep“ į įrankių grandinę „Go 1.10“ leidime, tačiau atrodo, kad vis dar yra ką eiti.

Atnaujinti @ 2018–02–03:

  • depas oficialiai paleistas.
  • dep nejuda į įrankių grandinę su 1.10. naujausią informaciją ieškokite gairėse.

Sukurkite projektą viduje $ GOPATH

Norint išspręsti „Gopackage“ kelius, projekto aplankas turi būti $ GOPATH viduje . Sukurkime naują projektą adresu $ GOPATH / src / gitlab.com / ykyuen / dep-example ir pridėkime šį failą.

main.go

Depas būdas

„Gopkg.toml“ ir „Gopkg.lock“

dep nuskaito du failus, vadinamus Gopkg.toml ir Gopkg.lock . Inicializuokime šiuos 2 failus naudodami komandą 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

Kaip matote, komanda dep init nuskaito šaltinio kodus ir atsisiunčia visus projektui reikalingus paketus į tiekėjo aplanką.

Gopkg.lock“ atlieka tą pačią funkciją kaip ir failas „ glide.lock“ . Jis užrakina paketų versiją, išskyrus versiją, kuri turėtų būti palaikoma Gopkg.toml . Trumpai tariant, failas „ Gopkg.lock“ yra automatiškai sugeneruotas ir tai priklauso nuo importo sakinių šaltinio versijoje, kurią valdo „ Gopkg.toml“ .

Atnaujinti priklausomybės versiją

Redaguokime „ Gopkg.toml“ ir naudokime šiek tiek senesnę „go-humanize“ paketo versiją, o ne naujausią pagrindinį šakotį .

Tada paleiskite dep užtikrinti, kad atnaujintumėte paketą į norimą versiją. Toliau pateikiamas atnaujinto „ Gopkg.lock“ skirtumas .

Pridėti naują priklausomybę

Naujas paketas gali būti pridėtas naudojant komandą dep užtikrinti -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/.

Dabar mes turime paruoštą naują apskaitos paketą pardavėjo aplanke su naujais apribojimais, parašytais Gopkg.toml ir užrakintais Gopkg.lock . Atnaujinkime main.go taip.

main.go

Ir paleisk jį.

[[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

„GIT“ submodulio klausimas

Vienas iš pagrindinių dep, palyginti su „Glide“, skirtumų, yra ignoruojamas paketo submodulis. Pvz., Pridėjus „go-goracle“ / „goracle“ paketą dep, viduje esantis odpi submodulis yra tuščias ir sukelia klaidą. Priežastį atsisakyti submodulio galima rasti šioje nuorodoje.

  • Ar planuojama pridėti „Git“ submodulių palaikymą?

Atnaujinti @ 2018–02–03:

Pastraipa apie „Git“ submodulius yra neteisinga.

Samas Boyeris rašė:

jūsų aprašytu atveju depas turėtų būti visiškai tinkamas pritraukti git submodulius. Aš tiesiog pakartojau tai, ką čia aprašėte, ir problema nėra submoduliai - tai, kad github.com/go-goracle/goracle/odpi nėra „Go“ kodo, todėl jo negalima tiesiogiai importuoti. Tikriausiai tam projektui turite išjungti nenaudojamų paketų genėjimą „Gopkg.toml“, nes kitaip dep užtikrins, kad tiesiogiai pašalins tai, kas, atrodo, nenaudojama (bet atrodo, kad „cgo“ iš tikrųjų ją naudoja).

Atnaujinti @ 2018–03–04:

Nustatyta, kad „go-goracle“ / „goracle“ paketas neveikia su „Dep“. Galite sekti toliau pateiktą problemą ir patikrinti naujausią „Dep“ komandos atnaujinimą.

  • Nepavykus gauti paketo „git“ submodulio po to, kai „Dep užtikrinti“ komandą

Santrauka

  • 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̶̵̶.̶̵̶
  • Jei naudojate Glide paveldėta ̶p̶r̶o̶j̶e̶c̶t̶.̶ galite apsvarstyti pereiti prie dep bet manau, nėra jokios žalos išlaikyti naudojant Glide, o kol dep oficialiai ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • Be to, ̶ trūksta ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ submodulis gali sugesti jūsų ̶c̶o̶d̶e̶.̶
  • depas oficialiai paleistas.
  • dep gerai veikia traukiant git submodulį.
  • Kur įmanoma, naudokite standartinę biblioteką. (Siūlė filosofas)
  • Šį pavyzdį galite atsiskaityti gitlab.com.

- Iš pradžių paskelbta „Boatswain“ tinklaraštyje.