Go
Vendoring
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"
}