2015-02-24 11 views
7

Ich habe eine ganze Reihe von Artikeln und SO-Fragen zum Importieren von 3rd-Party-Go-Paketen gelesen, was alles klar erscheint, aber was ich nicht verstehe ist, dass keine, die ich gelesen habe, irgendwelche Verweise auf Versionierung macht. In Dartlang gibt es die Pubspec-Datei, die Ihr Paket einschließlich seiner Version und seiner Abhängigkeiten einschließlich der erforderlichen Versionen definiert. Was passiert, wenn ich eine go get github.com/gorilla/sessions schreibe und meine App schreibe, dann 6 Monate später muss ich meine Verzeichnisse löschen und alles wieder bekommen, in welcher Zeit wurde dieses Paket aktualisiert und rückwärtskompatibilität mit meinem Code, der die ältere Version verwendet wurde gebrochen?Wie Pakete in Golang Version?

Antwort

9

Die offizielle Version, von den GO FAQ:

Falls Sie ein extern zugeführtes Paket verwenden und befürchten, dass es auf unerwartete Weise ändern könnte, ist die einfachste Lösung, um es zu Ihrem lokalen Repository zu kopieren. (Dies ist der Ansatz, den Google intern annimmt.) Speichern Sie die Kopie unter einem neuen Importpfad, der sie als lokale Kopie identifiziert.

Es gibt viele Alternative zu diesem Ansatz vor allem auf die genaue Version dieser Projekte erklären Sie verwenden.

Siehe zum Beispiel "Dead Simple Dependencies in Go -- Keep it simple and keep your sanity." (basierend auf emil2k/vend)

Die wichtigsten verschiedenen Optionen für Go Abhängigkeitsmanagement sind bei aufgelistet:

"Go Package Management -- A summary of dependency management in Go"
(und seinen Mitarbeitern GOPM mailing list)

Update Juli 2015:

-Update Q4 2017: als below erwähnt, ist die offizielle go dep Tool Version von Abhängigkeiten für Pinning (auch wenn das Pinning Ansatz nicht ohne Kritik: siehe "The cargo cult of versioning").
Es sollte in der Toolchain zusammengeführt werden, wenn Go 1.10 Entwicklung beginnt, according to its roadmap.

+0

+1 für die Aufnahme guter Links. Ich benutze gerne gopkg.in (erwähnt in Ihrem letzten Link), da es ein vernünftiger Weg zu sein scheint, "welche Version will ich?" Zu deklarieren, als "was commit hash will ich?" ist etwas kryptisch für neue Entwickler, die etwas verwenden, das Sie geschrieben haben. – pswaminathan

1

Ich verwende dep als Abhängigkeitsverwaltungstool für golang Projekt. Bitte benutzen Sie den folgenden Link dep tool für weitere Informationen.

dep ist ein Prototyp Abhängigkeitsmanagement-Tool für Go. Es erfordert Go 1.8 oder neuer zum kompilieren.

dep ist das offizielle Experiment, aber noch nicht das offizielle Werkzeug.

Aktueller Status: November 2017

dep ist für den produktiven Einsatz sicher.

Verwandte Themen