2015-02-24 11 views
7

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

9

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.

+0

+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

1

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.

Problemi correlati