Ho letto un sacco di articoli e domande SO sull'importazione di pacchetti di terze parti che sembrano tutti diretti, ma quello che non capisco è che nessuno di quelli che ho letto fa alcun riferimento al versioning. In Dartlang è presente il file pubspec che definisce il pacchetto includendo la sua versione e le sue dipendenze, incluse le versioni richieste. Cosa succede se faccio un go get github.com/gorilla/sessions
e scrivo la mia app poi 6 mesi dopo devo cancellare le mie directory e riottenere tutto di nuovo, in quale momento quel pacchetto è stato aggiornato e rotto alla compatibilità con il mio codice che utilizzava la versione precedente?come pacchetti di versione in golang?
risposta
La versione ufficiale, dal GO FAQ:
Se stai usando un pacchetto di alimentazione esterna e la preoccupazione che potrebbe cambiare in modi inaspettati, la soluzione più semplice è quella di copiare al suo repository locale. (Questo è l'approccio che Google prende internamente.) Memorizza la copia in un nuovo percorso di importazione che la identifica come copia locale.
ci sono molte alternative a questo approccio, basato principalmente su dichiarando l'esatta versione di quei progetti che si sta utilizzando.
Si veda ad esempio "Dead Simple Dependencies in Go -- Keep it simple and keep your sanity." (in base a emil2k/vend
)
Le principali opzioni diverse per Go Dipendenza Gestione sono elencati in:
"Go Package Management -- A summary of dependency management in Go"
(E il suo socio GOPM mailing list)
Aggiornamento luglio 2015:
- l'approccio di vendor ufficiale da parte del team Go è discussed here.
- uno strumento di go build alternativo chiamato "gb" è proposto a getgb.io per Dave Cheney.
Aggiornamento Q4 2017: come detto below, go dep
è lo strumento ufficiale per appuntare versione di dipendenze (anche se questo approccio pinning non è esente da critiche: vedi "The cargo cult of versioning").
Dovrebbe essere unito alla toolchain quando inizia lo sviluppo di Go 1.10, according to its roadmap.
Io uso dep
come strumento di gestione delle dipendenze per il progetto golang
. Si prega di utilizzare il seguente collegamento dep tool per maggiori informazioni.
dep
è un prototipo di strumento di gestione delle dipendenze per Go. Richiede Go 1.8 o versioni successive per compilare.
dep
è l'esperimento ufficiale, ma non ancora lo strumento ufficiale.
Stato attuale: novembre 2017
dep
è sicuro per l'uso in produzione.
+1 per includere buoni collegamenti. Mi piace usare gopkg.in (menzionato nel tuo ultimo link), dato che sembra essere un modo sensato per dichiarare "quale versione voglio?", Come "quale commit hash voglio?" è un po 'criptico per i nuovi sviluppatori che usano qualcosa che hai scritto. – pswaminathan