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"

}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow