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?

Shalakhin
quelle

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 .

tux21b
quelle
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
61

@tux Antwort ist großartig, wollte nur hinzufügen, dass Sie go get verwenden können , um ein bestimmtes Paket zu aktualisieren:

go get -u full_package_name
Salvador Dali
quelle
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/...
dtx
quelle
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
Aus
quelle
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

F566
quelle
-2

Gehen Sie zum Pfad und geben Sie ein

go get -u ./..

Alle erforderlichen Pakete werden aktualisiert.

kiki_ygn
quelle
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