Comment Go met-il à jour les packages tiers?

190

En regardant comment les packages golang se développent et s'améliorent activement, je me demande comment le problème avec les versions de packages est résolu?

Je vois que l'un des moyens consiste à stocker des packages tiers dans un dossier de projet.

Mais que faire si je l'installe avec go get?

shalakhin
la source

Réponses:

311

go getinstallera le package dans le premier répertoire répertorié dans GOPATH(une variable d'environnement qui peut contenir une liste de répertoires séparés par deux-points). Vous pouvez utiliser go get -upour mettre à jour les packages existants.

Vous pouvez également utiliser go get -u allpour mettre à jour tous les packages de votreGOPATH

Pour les projets plus importants, il peut être raisonnable de créer différents GOPATH pour chaque projet, de sorte que la mise à jour d'une bibliothèque dans le projet A ne causera pas de problèmes dans le projet B.

Tapez go help gopathpour en savoir plus sur la GOPATHvariable d'environnement.

tux21b
la source
2
est-il possible de mettre à jour tous les packages vers la dernière version, un peu comme une mise à jour de bundle?
chourobin
73
devrait juste être go get -u all désolé de ressusciter, mais juste au cas où quelqu'un d'autre regarderait.
Dan Anderson
go get -u allne fonctionne plus! L'exécution de cette commande dans le GOPATH, au moins pour Go 1.13, renverra un avertissement: `warning" all "matched no packages"
Contrapak
Fonctionne avec Go 1.12.9
fviktor
61

La réponse @tux est géniale, je voulais juste ajouter que vous pouvez utiliser go get pour mettre à jour un package spécifique:

go get -u full_package_name
Salvador Dali
la source
18

Étant donné que la question mentionnait les bibliothèques tierces et non tous les packages, vous souhaiterez probablement revenir à l'utilisation de caractères génériques.

Un cas d'utilisation étant: je veux juste mettre à jour tous mes packages obtenus à partir du Github VCS, alors vous diriez simplement:

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

Cela irait de l'avant et ne mettrait à jour que vos packages github dans le $GOPATH

Il en va de même pour un VCS, disons que vous souhaitez uniquement mettre à niveau tous les packages des repo d'ogranizaiton A car ils ont publié un correctif dont vous dépendez:

go get -u github.com/orgA/...
dtx
la source
11

Les réponses ci-dessus présentent les problèmes suivants:

  1. Ils mettent à jour tout, y compris votre application (au cas où vous auriez des modifications non validées).
  2. Ils ont mis à jour les packages que vous avez peut-être déjà supprimés de votre projet mais qui se trouvent déjà sur votre disque.

Pour éviter cela, procédez comme suit:

  1. Supprimez les dossiers tiers que vous souhaitez mettre à jour.
  2. allez dans le dossier de votre application et exécutez go get -d
Aus
la source
2

aller 1.13

(exec du répertoire racine du module)

Mettre à jour les dépendances spécifiées:

go get -u <package-name>

Mettez à jour toutes les dépendances directes et indirectes vers les dernières mises à niveau mineures ou correctives (les pré-versions sont ignorées):

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

Référence:

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

go help get

F566
la source
-2

Aller au chemin et tapez

go get -u ./..

Il mettra à jour tous les packages requis.

kiki_ygn
la source
Cette interprétation littérale ne fonctionne pas. Un peu plus de contexte serait utile.
Contrapak
2
Je crois qu'il voulait dire go get -u ./...(3 points)
Brian Leishman