In che modo Go aggiorna i pacchetti di terze parti?


190

Guardando come i pacchetti Golang crescono e migliorano attivamente Mi chiedo come sia risolto il problema con le versioni dei pacchetti?

Vedo che un modo è archiviare i pacchetti di terze parti in una cartella di progetto.

Ma cosa succede se lo installo con go get?

Risposte:


311

go getinstallerà il pacchetto nella prima directory elencata in GOPATH(una variabile di ambiente che potrebbe contenere un elenco di directory separato da due punti). È possibile utilizzare go get -uper aggiornare i pacchetti esistenti.

Puoi anche usare go get -u allper aggiornare tutti i pacchetti nel tuoGOPATH

Per progetti più grandi, potrebbe essere ragionevole creare GOPATH diversi per ciascun progetto, in modo che l'aggiornamento di una libreria nel progetto A non causi problemi nel progetto B.

Digita go help gopathper saperne di più sulla GOPATHvariabile d'ambiente.


2
è possibile aggiornare tutti i pacchetti all'ultima versione, un po 'come l'aggiornamento del bundle?
chourobin,

73
dovrebbe solo go get -u all dispiacersi risorgere, ma nel caso in cui qualcun altro stesse cercando.
Dan Anderson,

go get -u allnon lavora più! L'esecuzione di questo comando nella GOPATH, almeno per Go 1.13, restituirà un avviso: `warning" all "matched no pacchetti"
Contrapak

Funziona con Go 1.12.9
fviktor

61

La risposta @tux è fantastica, volevo solo aggiungere che puoi usare vai a aggiornare un pacchetto specifico:

go get -u full_package_name

18

Dal momento che la domanda menzionava le librerie di terze parti e non tutti i pacchetti, probabilmente vorrai ricorrere all'utilizzo di caratteri jolly.

Un caso d'uso è: voglio solo aggiornare tutti i miei pacchetti ottenuti da Github VCS, quindi diresti semplicemente:

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

Questo andrebbe avanti e aggiornerebbe solo i tuoi pacchetti github nella corrente $GOPATH

Lo stesso vale anche per un VCS, supponiamo che tu voglia aggiornare solo tutti i pacchetti dal repository di ogranizaiton A dato che hanno rilasciato un aggiornamento rapido da cui dipendi:

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

11

Le risposte sopra hanno i seguenti problemi:

  1. Aggiornano tutto, inclusa la tua app (in caso di modifiche non confermate).
  2. Hanno aggiornato i pacchetti che potresti aver già rimosso dal tuo progetto ma che sono già sul tuo disco.

Per evitarli, procedi come segue:

  1. Elimina le cartelle di terze parti che desideri aggiornare.
  2. vai alla cartella della tua app ed esegui go get -d

2

vai 1.13

(exec dalla directory principale del modulo)

Aggiorna le dipendenze specificate:

go get -u <package-name>

Aggiorna tutte le dipendenze dirette e indirette agli ultimi aggiornamenti minori o patch (le pre-release vengono ignorate):

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

Riferimento:

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

go help get



-2

Vai al percorso e digita

go get -u ./..

Aggiornerà tutti i pacchetti richiesti.


Questa interpretazione letterale non funziona. Qualche altro contesto sarebbe utile.
Contrapak,

2
Credo che volesse dire go get -u ./...(3 punti)
Brian Leishman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.