Sök…


Anmärkningar

Vendoring är en metod för att säkerställa att alla dina tredjepartspaket som du använder i ditt Go-projekt överensstämmer med alla som utvecklar för din applikation.

När ditt Go-paket importerar ett annat paket, kontrollerar kompilatorn normalt $GOPATH/src/ för sökvägen för det importerade projektet. Men om ditt paket innehåller en mapp som heter vendor , kommer kompilatorn att kolla in den mappen först . Detta innebär att du kan importera andra partipaket i ditt eget kodförråd utan att behöva ändra deras kod.

Leverantör är en standardfunktion i Go 1.6 och senare. I Go 1.5 måste du ställa in miljövariabeln för GO15VENDOREXPERIMENT=1 att aktivera leverantör.

Använd govendor för att lägga till externa paket

Govendor är ett verktyg som används för att importera tredjepartspaket till ditt kodförråd på ett sätt som är kompatibelt med golangs leverantör.

Säg till exempel att du använder ett tredjepartspaket bosun.org/slog :

package main

import "bosun.org/slog"

func main() {
    slog.Infof("Hello World")
}

Din katalogstruktur kan se ut:

$GOPATH/src/
├── github.com/me/helloworld/
|   ├── hello.go 
├── bosun.org/slog/
|   ├── ... (slog files)

Men någon som github.com/me/helloworld kanske inte har en $GOPATH/src/bosun.org/slog/ folder, vilket orsakar att deras byggnad misslyckas på grund av saknade paket.

Om du kör följande kommando vid din kommandotolk kommer alla externa paket från Go-paketet att paketeras och de erforderliga bitarna paketeras i en leverantörsmapp:

govendor add +e

Detta instruerar govendor att lägga till alla externa paket i ditt aktuella förvar.

Din applikations katalogstruktur skulle nu se ut:

$GOPATH/src/
├── github.com/me/helloworld/
|   ├── vendor/
|   |   ├── bosun.org/slog/
|   |   |   ├── ... (slog files)
|   ├── hello.go 

och de som klonar ditt förvar tar också de nödvändiga paket från tredje part.

Använd papperskorgen för att hantera ./vendor

trash är ett minimalistiskt leverantörsverktyg som du konfigurerar med filen vendor.conf . Detta exempel är för trash själv:

# 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

Den första raden som inte kommenterar är paketet vi hanterar ./vendor för (Obs: detta kan bokstavligen vara vilket paket som helst i ditt projekt, inte bara roten).

Kommenterade rader börjar med # .

Varje icke-tom och icke-kommentarrad listar ett beroende. Endast "root" -paketet för beroendet behöver listas.

Efter att paketnamnet har gått versionen (åtagande, tagg eller gren) och valfritt webbadress för paketförvaret (som standard dras det ut från paketnamnet).

För att fylla din ./vendor dir måste du ha vendor.conf fil i den nuvarande dir och bara köra:

$ trash

Papperskorgen klonar de levererade biblioteken i ~/.trash-cache (som standard), kassar efterfrågade versioner, kopierar filerna till ./vendor dir och beskär icke-importerade paket och testfiler . Det sista steget håller din ./vendor mager och menad och hjälper till att spara utrymme i ditt projektrepo.

Obs: från och med v0.2.5 är papperskorgen tillgängligt för Linux och macOS, och stöder bara git för att hämta paket, eftersom git är det mest populära, men vi arbetar med att lägga till alla andra som go get support.

Använd golang / dep

golang / dep är ett prototyphanteringsverktyg. Blir snart ett officiellt versioneringsverktyg. Nuvarande status Alpha .

Användande

Skaffa verktyget via

$ go get -u github.com/golang/dep/...

En vanlig användning på en ny repo kan vara

$ dep init
$ dep ensure -update

För att uppdatera ett beroende till en ny version kanske du kör

$ dep ensure github.com/pkg/errors@^0.8.0

Observera att formatet för manifest och låsning nu har slutförts . Dessa kommer att förbli kompatibla även när verktyget ändras.

leverantör.json med Govendor-verktyget

# 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

Exempel på leverantör.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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow