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
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:
- der offizielle Herangehensweise von Go-Team ist discussed here.
- ein alternatives Go-Build-Tool namens "gb" wird bei getgb.io von Dave Cheney vorgeschlagen.
-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.
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.
- 1. Wie funktionieren Pakete in Golang?
- 2. Wie binäre Pakete in Golang zu erstellen?
- 3. Wie für alle Pakete in golang
- 4. Wie funktionieren Pakete mit mehreren Dateien in Golang?
- 5. GoLang und Pakete Layout mit relativen Pfaden
- 6. Nuget Pakete Version in Ordner ausschließen Benennung
- 7. Golang, wie man lokale Pakete ohne gopath importiert?
- 8. Golang 1.6 Kann keine Pakete im Lieferantenordner finden
- 9. Alte Cygwin-Pakete mit Version 1.7 verwendbar?
- 10. NuGet - Verwaltung und Multi-Version-Pakete in Einzel Lösung
- 11. Wie in golang
- 12. Die Pakete können nicht in der neuesten Version von RStudio und R Version.3.1.1 installiert werden.
- 13. Golang: Installationsverzeichnisfehler?
- 14. Wie Pakete in Meteor.js verwalten?
- 15. Datenstrukturen in Golang
- 16. Raw Socket Sniffing in Golang
- 17. in Golang
- 18. Wie zwei Versionsnummer Strings in golang vergleichen
- 19. Wie Cache http.Response in Golang?
- 20. Golang-Pakete für doc in docx und docx in pdf convertion?
- 21. wie mongodb 3.0 in golang verbinden
- 22. Wie in Speicherschlüssel Wertspeicher in golang effizient implementieren
- 23. Wie installiere ich zusätzliche Pakete in WinPython?
- 24. in golang
- 25. Wie ändert man Perl-Skript, um Pakete in verschiedenen Verzeichnissen basierend auf der Version zu verschieben?
- 26. installieren Pakete in Pycharm
- 27. Gibt es eine Standardmethode, um eine Datenbanksitzung über Pakete in Golang hinweg offen zu halten?
- 28. Sommerzeit in Golang
- 29. Wie misst man die Golang-Integrationstestabdeckung?
- 30. Pakete in Java importieren
+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