Go
vendoring
Zoeken…
Opmerkingen
Vendoring is een methode om ervoor te zorgen dat al uw pakketten van derden die u in uw Go-project gebruikt, consistent zijn voor iedereen die zich ontwikkelt voor uw toepassing.
Wanneer uw Go-pakket een ander pakket importeert, controleert de compiler normaal $GOPATH/src/
op het pad van het geïmporteerde project. Als uw pakket echter een map met de naam vendor
, zal de compiler eerst die map inchecken. Dit betekent dat u pakketten van andere partijen in uw eigen coderepository kunt importeren, zonder dat u hun code hoeft te wijzigen.
Verkoop is een standaardfunctie in Go 1.6 en hoger. In Go 1.5 moet u de omgevingsvariabele GO15VENDOREXPERIMENT=1
om vendoring in te schakelen.
Gebruik govendor om externe pakketten toe te voegen
Govendor is een hulpmiddel dat wordt gebruikt om pakketten van derden in uw coderepository te importeren op een manier die compatibel is met de verkoop van golang.
Stel bijvoorbeeld dat u een pakket van derden gebruikt bosun.org/slog
:
package main
import "bosun.org/slog"
func main() {
slog.Infof("Hello World")
}
Uw mapstructuur kan er als volgt uitzien:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── hello.go
├── bosun.org/slog/
| ├── ... (slog files)
Iemand die github.com/me/helloworld
mogelijk geen $GOPATH/src/bosun.org/slog/
map, waardoor de build mislukt vanwege ontbrekende pakketten.
Als u de volgende opdracht uitvoert vanaf uw opdrachtprompt, worden alle externe pakketten uit uw Go-pakket gepakt en worden de vereiste bits in een map van een leverancier verpakt:
govendor add +e
Dit geeft govendor de opdracht om alle externe pakketten toe te voegen aan uw huidige repository.
De directorystructuur van uw applicatie ziet er nu uit als:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── vendor/
| | ├── bosun.org/slog/
| | | ├── ... (slog files)
| ├── hello.go
en degenen die uw repository klonen, zullen ook de vereiste pakketten van derden pakken.
Prullenbak gebruiken om ./vendor te beheren
trash
is een minimalistisch verkoopprogramma dat u configureert met het bestand vendor.conf
. Dit voorbeeld is voor de trash
zelf:
# 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
De eerste regel zonder commentaar is het pakket waarvoor we ./vendor beheren (let op: dit kan letterlijk elk pakket in uw project zijn, niet alleen het hoofdpakket).
Opmerkingenregels beginnen met #
.
Elke niet-lege en geen commentaarregel geeft een afhankelijkheid weer. Alleen het "root" -pakket van de afhankelijkheid moet worden vermeld.
Nadat de pakketnaam de versie is (commit, tag of branch) en optioneel de pakketrepository-URL (standaard wordt deze afgeleid uit de pakketnaam).
Om uw ./vendor-map te vullen, moet u het bestand vendor.conf
in de huidige map hebben en gewoon uitvoeren:
$ trash
Prullenbak zal de gevende bibliotheken in ~/.trash-cache
(standaard), de aangevraagde versies uitchecken, de bestanden naar ./vendor
dir kopiëren en niet-geïmporteerde pakketten en testbestanden snoeien . Deze laatste stap houdt uw ./vendor slank en gemeen en helpt ruimte te besparen in uw projectrepository.
Opmerking: vanaf v0.2.5 is prullenbak beschikbaar voor Linux en macOS, en ondersteunt alleen git om pakketten op te halen, aangezien git de meest populaire is, maar we werken aan het toevoegen van alle andere die ondersteuning go get
.
Gebruik golang / dep
golang / dep is een prototype afhankelijkheidsbeheertool. Binnenkort een officiële versie-tool. Huidige status Alpha .
Gebruik
Download de tool via
$ go get -u github.com/golang/dep/...
Typisch gebruik op een nieuwe repo kan zijn
$ dep init $ dep ensure -update
Als u een afhankelijkheid van een nieuwe versie wilt bijwerken, kunt u uitvoeren
$ dep ensure github.com/pkg/errors@^0.8.0
Merk op dat de bestandsindelingen voor manifest en vergrendelen nu zijn voltooid . Deze blijven compatibel, zelfs als het gereedschap verandert.
vendor.json met behulp van Govendor tool
# 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
Voorbeeld 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"
}