Go
Vendoring
Ricerca…
Osservazioni
La vendita è un metodo per garantire che tutti i pacchetti di terze parti che utilizzi nel tuo progetto Go siano coerenti per tutti coloro che si sviluppano per la tua applicazione.
Quando il tuo pacchetto Go importa un altro pacchetto, il compilatore normalmente controlla $GOPATH/src/
per il percorso del progetto importato. Tuttavia, se il pacchetto contiene una cartella denominata vendor
, il compilatore controllerà in quella cartella prima. Ciò significa che puoi importare pacchetti di altre parti all'interno del tuo repository di codice, senza dover modificare il loro codice.
La vendita è una funzione standard in Go 1.6 e versioni successive. In Go 1.5, è necessario impostare la variabile di ambiente di GO15VENDOREXPERIMENT=1
per abilitare la vendita.
Utilizza il govendor per aggiungere pacchetti esterni
Govendor è uno strumento che viene utilizzato per importare pacchetti di terze parti nel proprio repository di codice in un modo compatibile con la distribuzione di golang.
Supponiamo ad esempio che tu stia utilizzando un pacchetto di terze parti bosun.org/slog
:
package main
import "bosun.org/slog"
func main() {
slog.Infof("Hello World")
}
La struttura della directory potrebbe essere simile a:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── hello.go
├── bosun.org/slog/
| ├── ... (slog files)
Comunque qualcuno che cloni github.com/me/helloworld
potrebbe non avere una $GOPATH/src/bosun.org/slog/
, causando il fallimento della loro compilazione a causa di pacchetti mancanti.
L'esecuzione del seguente comando al prompt dei comandi acquisirà tutti i pacchetti esterni dal pacchetto Go e comprimerà i bit necessari in una cartella del fornitore:
govendor add +e
Questo istruisce il govendor ad aggiungere tutti i pacchetti esterni nel tuo attuale repository.
La struttura della directory dell'applicazione ora sarà simile a:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── vendor/
| | ├── bosun.org/slog/
| | | ├── ... (slog files)
| ├── hello.go
e quelli che clonano il tuo repository prenderanno anche i pacchetti necessari di terze parti.
Usare il cestino per gestire ./vendor
trash
è uno strumento di vendita minimalista che puoi configurare con il file vendor.conf
. Questo esempio è per il trash
stesso:
# package
github.com/rancher/trash
github.com/Sirupsen/logrus v0.10.0
github.com/urfave/cli v1.18.0
github.com/cloudfoundry-incubator/candiedyaml 99c3df8 https://github.com/imikushin/candiedyaml.git
github.com/stretchr/testify v1.1.3
github.com/davecgh/go-spew 5215b55
github.com/pmezard/go-difflib 792786c
golang.org/x/sys a408501
La prima riga non commentata è il pacchetto che stiamo gestendo ./vendor for (nota: questo può essere letteralmente qualsiasi pacchetto nel tuo progetto, non solo quello di root).
Le righe commentate iniziano con #
.
Ogni riga non vuota e non commentata elenca una dipendenza. È necessario elencare solo il pacchetto "root" della dipendenza.
Dopo che il nome del pacchetto diventa la versione (commit, tag o branch) e opzionalmente l'URL del repository del pacchetto (per impostazione predefinita, viene dedotto dal nome del pacchetto).
Per popolare la tua directory ./vendor, devi avere il file vendor.conf
nella directory corrente ed eseguire semplicemente:
$ trash
Il cestino clonerà le librerie vendute in ~/.trash-cache
(per impostazione predefinita), ~/.trash-cache
checkout delle versioni richieste, copierà i file nella directory ./vendor
e ./vendor
pacchetti non importati e i file di test . Questo ultimo passaggio mantiene il tuo ./vendor snello e cattivo e aiuta a risparmiare spazio nel repository del tuo progetto.
Nota: dal v0.2.5 il cestino è disponibile per Linux e macOS e supporta solo git per recuperare i pacchetti, dato che git è il più popolare, ma stiamo lavorando per aggiungere tutti gli altri che go get
supporti.
Usa golang / dep
golang / dep è un prototipo di strumento di gestione delle dipendenze. Presto sarà uno strumento di versioning ufficiale. Stato attuale Alfa .
uso
Ottieni lo strumento tramite
$ go get -u github.com/golang/dep/...
L'uso tipico su un nuovo repository potrebbe essere
$ dep init $ dep ensure -update
Per aggiornare una dipendenza a una nuova versione, è possibile eseguire
$ dep ensure github.com/pkg/errors@^0.8.0
Si noti che i formati manifest e lock sono ora stati finalizzati . Questi rimarranno compatibili anche se lo strumento cambia.
vendor.json utilizzando lo strumento Govendor
# It creates vendor folder and vendor.json inside it
govendor init
# Add dependencies in vendor.json
govendor fetch <dependency>
# Usage on new repository
# fetch depenencies in vendor.json
govendor sync
Esempio vendor.json
{
"comment": "",
"ignore": "test",
"package": [
{
"checksumSHA1": "kBeNcaKk56FguvPSUCEaH6AxpRc=",
"path": "github.com/golang/protobuf/proto",
"revision": "2bba0603135d7d7f5cb73b2125beeda19c09f4ef",
"revisionTime": "2017-03-31T03:19:02Z"
},
{
"checksumSHA1": "1DRAxdlWzS4U0xKN/yQ/fdNN7f0=",
"path": "github.com/syndtr/goleveldb/leveldb/errors",
"revision": "8c81ea47d4c41a385645e133e15510fc6a2a74b4",
"revisionTime": "2017-04-09T01:48:31Z"
}
],
"rootPath": "github.com/sample"
}