Wie aktualisiert Go Pakete von Drittanbietern?


189

Wenn ich sehe, wie aktiv Golang-Pakete wachsen und sich verbessern, frage ich mich, wie das Problem mit Paketversionen gelöst wird.

Ich sehe, dass eine Möglichkeit darin besteht, Pakete von Drittanbietern unter einem Projektordner zu speichern.

Aber was ist, wenn ich es mit installiere go get?

Antworten:


308

go getinstalliert das Paket in dem ersten Verzeichnis, das unter aufgeführt ist GOPATH(eine Umgebungsvariable, die möglicherweise eine durch Doppelpunkte getrennte Liste von Verzeichnissen enthält). Sie können go get -uvorhandene Pakete aktualisieren.

Sie können auch go get -u allalle Pakete in Ihrem aktualisierenGOPATH

Bei größeren Projekten kann es sinnvoll sein, für jedes Projekt unterschiedliche GOPATHs zu erstellen, damit das Aktualisieren einer Bibliothek in Projekt A keine Probleme in Projekt B verursacht.

Geben Sie ein go help gopath, um mehr über die GOPATHUmgebungsvariable zu erfahren .


2
Ist es möglich, alle Pakete auf die neueste Version zu aktualisieren, ähnlich wie bei einem Bundle-Update?
Chourobin

73
Es sollte nur go get -u all leid tun, wieder auferstehen zu müssen, aber nur für den Fall, dass jemand anderes hinschaut.
Dan Anderson

go get -u allfunktioniert nicht mehr! Wenn Sie diesen Befehl im GOPATH ausführen, zumindest für Go 1.13, wird eine Warnung zurückgegeben: "Warnung" Alle "stimmten mit keinen Paketen überein"
Contrapak

Funktioniert mit Go 1.12.9
fviktor


18

Da in der Frage Bibliotheken von Drittanbietern und nicht alle Pakete erwähnt wurden, möchten Sie wahrscheinlich auf die Verwendung von Platzhaltern zurückgreifen.

Ein Anwendungsfall ist: Ich möchte nur alle meine Pakete aktualisieren, die vom Github VCS bezogen werden. Dann würden Sie einfach sagen:

go get -u github.com/... // ('...' being the wildcard). 

Dies würde fortfahren und nur Ihre Github-Pakete in der aktuellen aktualisieren $GOPATH

Gleiches gilt auch für ein VCS. Angenommen, Sie möchten nur alle Pakete von den Repos von ogranizaiton A aktualisieren, da sie einen Hotfix veröffentlicht haben, von dem Sie abhängig sind:

go get -u github.com/orgA/...

11

Die obigen Antworten haben die folgenden Probleme:

  1. Sie aktualisieren alles, einschließlich Ihrer App (falls Sie nicht festgeschriebene Änderungen haben).
  2. Sie haben Pakete aktualisiert, die Sie möglicherweise bereits aus Ihrem Projekt entfernt haben, die sich jedoch bereits auf Ihrer Festplatte befinden.

Um dies zu vermeiden, gehen Sie wie folgt vor:

  1. Löschen Sie die Ordner von Drittanbietern, die Sie aktualisieren möchten.
  2. Gehen Sie zu Ihrem App-Ordner und führen Sie ihn aus go get -d

1

gehe 1.13

(Exec aus dem Modulstammverzeichnis)

Aktualisieren Sie die angegebenen Abhängigkeiten:

go get -u <package-name>

Aktualisieren Sie alle direkten und indirekten Abhängigkeiten auf die neuesten kleineren oder Patch-Upgrades (Vorabversionen werden ignoriert):

go get -u ./...
# or
go get -u=patch ./...

Referenz:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get



-2

Gehen Sie zum Pfad und geben Sie ein

go get -u ./..

Alle erforderlichen Pakete werden aktualisiert.


Diese wörtliche Interpretation funktioniert nicht. Etwas mehr Kontext wäre hilfreich.
Contrapak

2
Ich glaube, er meinte go get -u ./...(3 Punkte)
Brian Leishman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.