Eine Einführung zu dep: So verwalten Sie Ihre Golang-Projektabhängigkeiten

dep - Ein Go-Tool zur Verwaltung von Abhängigkeiten

Update @ 2018–11–26: Die Technologie bewegt sich nicht nur rasant, sondern auch rasant. Innerhalb eines Jahres ist dieser Artikel veraltet!

Und entsprechend der dep Projektseite:

dep war das „offizielle Experiment“. Die Go-Toolchain hat seit 1.11 (experimentell) einen Ansatz gewählt, der sich stark von dep unterscheidet. Infolgedessen entwickeln wir dep weiter, konzentrieren uns jedoch in erster Linie auf die Entwicklung eines alternativen Prototyps für das Versionsverhalten in der Toolchain.

Weitere Informationen zur neuen integrierten Go-Verwaltung finden Sie im offiziellen GitHub Wiki - Go 1.11-Modul.

Vielen Dank an John Arundel @bitfield und Erhan Yakut @yakuter für die Aufdeckung des Problems.

-

Update @ 2018–02–03: Sam Boyer vom Godep-Team hat einige falsche Informationen in diesem Artikel geklärt. Ich entschuldige mich bei Sam Boyer und den Lesern für etwaige Unannehmlichkeiten.

-

Zuvor habe ich einen Artikel über das Abhängigkeitsmanagement in Go using Glide veröffentlicht. Ich habe eine Rückmeldung erhalten, dass Glide veraltet sein wird. Das Glide-Team schlägt Benutzern vor, zu einem anderen Abhängigkeitsmanagement-Tool zu wechseln, das vom Golang-Team dep geschrieben wurde.

Die Go-Community verfügt nun über das Dep-Projekt zum Verwalten von Abhängigkeiten. Bitte überlegen Sie, ob Sie versuchen, von Glide nach dep zu migrieren. Glide wird noch einige Zeit unterstützt, wird jedoch eher als Support denn als aktive Feature-Entwicklung eingestuft.

Es gibt einen Plan für die Integration von dep in die Toolchain in Go 1.10, aber es scheint, dass noch ein langer Weg vor uns liegt.

Update @ 2018–02–03:

  • dep ist offiziell freigegeben.
  • dep bewegt sich mit 1.10 nicht in die Toolchain. Die neuesten Informationen finden Sie in der Roadmap.
Und ich bin einfach nicht schnell genug.

Erstellen Sie das Projekt in $ GOPATH

Der Projektordner muss sich in $ GOPATH befinden, um die Gopackage-Pfade aufzulösen. Erstellen wir ein neues Projekt unter $ GOPATH / src / gitlab.com / ykyuen / dep-example und fügen Sie die folgende Datei hinzu.

main.go

Die dep weg

Gopkg.toml und Gopkg.lock

dep liest zwei Dateien namens Gopkg.toml und Gopkg.lock. Initialisieren wir diese 2 Dateien mit dem Befehl dep init.

[ykyuen @ camus dep-example] $ dep init
  Verwendung von master als Einschränkung für direct dep github.com/dustin/go-humanize
  Master einschließen (bb3d318) für direktes Dep github.com/dustin/go-humanize

Wie Sie sehen, durchsucht der Befehl dep init die Quellcodes und lädt alle für das Projekt erforderlichen Pakete in den Herstellerordner herunter.

Der Gopkg.lock hat genau die gleiche Funktion wie die glide.lock-Datei. Es sperrt die Version der Pakete, AUSSER die Version sollte in der Gopkg.toml gepflegt werden. Kurz gesagt, die Datei Gopkg.lock wird automatisch generiert und hängt von den Importanweisungen in der Quellversion ab, die von Gopkg.toml gesteuert wird.

Aktualisieren Sie die Version der Abhängigkeit

Bearbeiten Sie die Datei Gopkg.toml und verwenden Sie eine etwas ältere Version des go-humanize-Pakets anstelle des neuesten Master-Zweigs.

Führen Sie dann dep sure aus, um das Paket auf die gewünschte Version zu aktualisieren. Das Folgende ist der Unterschied des aktualisierten Gopkg.lock.

Fügen Sie eine neue Abhängigkeit hinzu

Neues Paket kann mit dem Befehl dep verify -add hinzugefügt werden.

[ykyuen @ camus dep-example] $ dep -add github.com/leekchan/accounting sicherstellen
Quellen werden abgerufen ...
"github.com/leekchan/accounting" wird von Ihrem Projekt nicht importiert und wurde vorübergehend zu Gopkg.lock und vendor / hinzugefügt.
Wenn Sie "dep sure" erneut ausführen, bevor Sie es tatsächlich importieren, wird es von Gopkg.lock und vendor / verschwinden.

Jetzt haben wir das neue Buchhaltungspaket im Vendor-Ordner mit neuen Einschränkungen, die in Gopkg.toml geschrieben und in Gopkg.lock gesperrt wurden. Lassen Sie uns das main.go wie folgt aktualisieren.

main.go

Und lass es laufen.

[ykyuen @ camus dep-example] $ go run main.go
Hallo Welt
Diese Datei ist 83 MB groß.
Du bist mein 193. bester Freund.
Sie schulden 6.582.491 US-Dollar.
123.456.789,21 USD
12.345.678,00 USD
25.925.925,67 US-Dollar
- 25.925.925,67 USD
123.456.789,21 USD

Das Problem mit Git-Modul

Ein wesentlicher Unterschied von dep zu Glide ist, dass das Submodul des Pakets ignoriert wird. Nach dem Hinzufügen des Pakets go-goracle / goracle von dep ist das darin enthaltene odpi-Submodul beispielsweise leer und führt zu Fehlern. Den Grund für den Ausfall des Submoduls finden Sie unter folgendem Link.

  • Gibt es Pläne, Git-Submodule zu unterstützen?

Update @ 2018–02–03:

Der Absatz über Git-Submodule ist falsch.

Sam Boyer schrieb:

In dem von Ihnen beschriebenen Fall sollte dep vollkommen in Ordnung sein, um Git-Submodule einzuspielen. Ich habe nur das, was Sie hier beschrieben haben, lokal repliziert und das Problem liegt nicht in den Submodulen. Es gibt nämlich keinen Go-Code in github.com/go-goracle/goracle/odpi, sodass es nicht direkt importiert werden kann.
Wahrscheinlich müssen Sie unbenutzte Pakete in Gopkg.toml für dieses Projekt deaktivieren, da dep sure andernfalls automatisch entfernt, was als unbenutzt erscheint (aber es scheint, dass es tatsächlich von cgo verwendet wird).

Update @ 2018–03–04:

Es wurde festgestellt, dass das Go-Goracle / Goracle-Paket mit dep nicht funktioniert. Sie können dem unten aufgeführten Problem folgen und das neueste Update des Dep-Teams überprüfen.

  • Fehler beim Abrufen des Git-Submoduls eines Pakets nach dem Befehl dep sure

Zusammenfassung

  • DEP ist sehr wahrscheinlich zu sein, die offizielle Dependency Management-Tool im golang ̶̵̶c̶̵̶o̶̵̶m̶̵̶m̶̵̶u̶̵̶n̶̵̶i̶̵̶t̶̵̶y̶̵̶.̶̵̶
  • Wenn Sie ein Problem haben, gehen Sie zu
  • Wenn Sie mit Gleitflug ein Vermächtnis ̶p̶r̶o̶j̶e̶c̶t̶.̶ Sie sollten sich überlegen Migrating DEP aber ich denke, es gibt keinen Schaden weiterverwenden glide Sie, bis Dep OFFIZIELL ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • Außerdem ̶ FEHLT ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ Submodul kann zu Funktionsstörungen Ihrer ̶c̶o̶d̶e̶.̶
  • dep ist offiziell freigegeben.
  • dep funktioniert gut beim Ziehen des Git-Submoduls.
  • Verwenden Sie nach Möglichkeit die Standardbibliothek. (Vorgeschlagen von philoserf)
  • Sie können dieses Beispiel auf gitlab.com überprüfen.

- Ursprünglich auf Boatswain Blog gepostet.