Úvod do depa: Ako spravovať závislosti na projekte Golang

dep - Nástroj na správu závislosti Go

Aktualizácia @ 2018–11–26: Technológia sa nehýbe len rýchlosťou, ale rýchlo sa mení. Do jedného roka je tento článok NADOBUDNUTÝ!

A podľa stránky projektu dep:

Dep bol „oficiálny experiment“. Nástrojová zbierka Go od 1.11 prijala (experimentálne) prístup, ktorý sa výrazne odlišuje od dep. Výsledkom je, že pokračujeme vo vývoji depu, ale zameriavame sa predovšetkým na vývoj alternatívneho prototypu pre správu verzií v toolchaine.

Viac informácií o novom zabudovanom riadení Go nájdete v oficiálnych moduloch GitHub Wiki - Go 1.11.

Ďakujeme Johnovi Arundel @bitfield a Erhan Yakut @ yakuter za odhalenie problému.

-

Aktualizácia @ 2018–02–03: Sam Boyer z Godep tímu objasnil niektoré nesprávne informácie v tomto článku. Ospravedlňujem sa Sam Boyerovi a čitateľom za akékoľvek nepríjemnosti.

-

Predtým som uverejnil článok o správe závislostí v službe Go using Glide. Dostal som spätnú väzbu, že Glide sa stane zastaraným. Tím Glide navrhuje používateľom prejsť na iný nástroj na správu závislostí nazývaný dep napísaný tímom Golang.

Komunita Go má teraz projekt dep na správu závislostí. Zvážte pokus o migráciu z Glide na dep. Klzák bude nejakú dobu naďalej podporovaný, ale považuje sa skôr za stav podpory než aktívny vývoj funkcií.

Vo vydaní Go 1.10 existuje plán na integráciu dep do toolchainu, zdá sa však, že ešte stále musí ísť.

Aktualizácia @ 2018–02–03:

  • Dep je oficiálne prepustený.
  • Dep sa nepohybuje s nástrojom s 1.10. najnovšie informácie nájdete v cestovnej mape.
A ja nie som dosť rýchly.

Vytvorte projekt v $ GOPATH

Zložka projektu musí byť vo vnútri $ GOPATH, aby sa vyriešili cesty Gopackage. Vytvorme nový projekt na $ GOPATH / src / gitlab.com / ykyuen / dep-example a pridáme nasledujúci súbor.

main.go

Dep cesta

Gopkg.toml a Gopkg.lock

dep prečíta dva súbory s názvom Gopkg.toml a Gopkg.lock. Inicializujme tieto dva súbory pomocou príkazu dep init.

[ykyuen @ camus dep-example] $ dep init
  Použitie Master ako obmedzenia pre priame dep github.com/dustin/go-humanize
  Zamykanie v masteri (bb3d318) pre priame dep github.com/dustin/go-humanize

Ako vidíte, príkaz dep init prehľadá zdrojové kódy a stiahne všetky balíčky potrebné pre projekt do priečinka dodávateľa.

Gopkg.lock slúži presne rovnako ako súbor glide.lock. Uzamkne verziu balíkov, OKREM verzie by sa mala udržiavať v súbore Gopkg.toml. Stručne povedané, súbor Gopkg.lock je automaticky generovaný a závisí od príkazov na import v zdrojovej verzii, ktorú riadi Gopkg.toml.

Aktualizujte verziu závislosti

Upravme súbor Gopkg.toml a namiesto najnovšej hlavnej vetvy použijeme trochu staršiu verziu balíka go-humanize.

Potom spustite dep uistiť, aby sa balík aktualizoval na požadovanú verziu. Nasleduje rozdiel aktualizovaného súboru Gopkg.lock.

Pridajte novú závislosť

Nový balík je možné pridať pomocou príkazu dep zabezpečiť -add.

[ykyuen @ camus dep-example] $ dep zaistiť -add github.com/leekchan/account
Načítavajú sa zdroje ...
"github.com/leekchan/account" nie je importovaný do vášho projektu a bol dočasne pridaný do Gopkg.lock a vendor /.
Ak spustíte príkaz „dep zabezpečiť“ ešte predtým, ako ho skutočne naimportujete, z programu Gopkg.lock a predajcu / zmizne.

Teraz máme nový účtovný balík pripravený v priečinku dodávateľa s novými obmedzeniami napísanými do Gopkg.toml a zamknutými v Gopkg.lock. Aktualizujme main.go nasledovne.

main.go

A spustite to.

[ykyuen @ camus dep-example] $ go run main.go
ahoj svet
Tento súbor má 83 MB.
Si môj 193. najlepší priateľ.
Dlžíte 6 582 491 dolárov.
$ 123,456,789.21
$ 12,345,678.00
$ 25,925,925.67
- $ 25,925,925.67
$ 123,456,789.21

Problém s gitovým submodulom

Jedným z hlavných rozdielov dep v porovnaní s Glide je ignorovanie submodulu balíka. Napríklad po pridaní balíčka go-goracle / goracle pomocou dep je submodul odpi vo vnútri prázdny a vedie k chybe. Dôvod vynechania submodulu je uvedený na nasledujúcom odkaze.

  • Existujú nejaké plány na pridanie podpory submodúl Git?

Aktualizácia @ 2018–02–03:

Odsek o čiastkových moduloch Git je nesprávny.

Sam Boyer napísal:

dep by mal byť úplne v poriadku pri ťahaní gitových submodulov v prípade, že popíšete. Miestne som replikoval to, čo tu popíšete, a problém nie je submodulmi - v github.com/go-goracle/goracle/odpi neexistuje žiadny kód Go, takže ho nemožno importovať priamo.
Pravdepodobne budete musieť vypnúť nepoužité balíčky v Gopkg.toml konkrétne pre tento projekt, pretože v opačnom prípade funkcia dep zaistí automatické odstránenie toho, čo sa javí ako nepoužité priamo (zdá sa však, že je to skutočne použité programom Cgo).

Aktualizácia @ 2018–03–04:

Zistilo sa, že balík go-goracle / goracle nefunguje s dep. Mohli by ste postupovať podľa nižšie uvedeného problému a skontrolovať najnovšiu aktualizáciu od tímu oddelenia dep.

  • Nepodarilo sa získať git submodul balíka po príkaze dep zabezpečiť

zhrnutie

  • DEP je celkom pravdepodobné, byť oficiálne závislosť na nástroj pre správu sa v ̶̵̶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̶̵̶ ̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶
  • Ak používate Glide na pôvodnú ̶p̶r̶o̶j̶e̶c̶t̶.̶ by ste mohol zvážiť migráciu do dep ale myslím, že nie je nič zlého naďalej používať Glide na chvíľu, až DEP je oficiálne ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • Okrem toho ̶ chýba ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ submodul môže mať za následok poruchu funkcie ̶c̶o̶d̶e̶.̶
  • Dep je oficiálne prepustený.
  • Dep funguje dobre na ťahanie git submodulu.
  • Ak je to možné, používajte štandardnú knižnicu. (Navrhol philoserf)
  • Tento príklad si môžete pozrieť na stránke gitlab.com.

- Pôvodne uverejnené na blogu Boatswain.