Go
Vendoring
Suche…
Bemerkungen
Vendoring ist eine Methode, um sicherzustellen, dass alle in Ihrem Go-Projekt verwendeten Pakete von Drittanbietern für alle, die für Ihre Anwendung entwickeln, konsistent sind.
Wenn Ihr Go-Paket ein anderes Paket importiert, überprüft der Compiler normalerweise $GOPATH/src/
auf den Pfad des importierten Projekts. Wenn Ihr Paket jedoch einen Ordner mit dem Namen vendor
enthält, vendor
der Compiler diesen Ordner zuerst ein . Dies bedeutet, dass Sie Pakete anderer Parteien in Ihrem eigenen Code-Repository importieren können, ohne ihren Code ändern zu müssen.
Vendoring ist eine Standardfunktion in Go 1.6 und höher. In Go 1.5 müssen Sie die Umgebungsvariable von GO15VENDOREXPERIMENT=1
, um das Vendoring zu aktivieren.
Verwenden Sie govendor, um externe Pakete hinzuzufügen
Govendor ist ein Tool, mit dem Pakete von Drittanbietern auf eine Weise in Ihr Code-Repository importiert werden können, die mit dem Verkauf von golang kompatibel ist.
Sagen Sie zum Beispiel, dass Sie ein Drittanbieter-Paket bosun.org/slog
:
package main
import "bosun.org/slog"
func main() {
slog.Infof("Hello World")
}
Ihre Verzeichnisstruktur könnte folgendermaßen aussehen:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── hello.go
├── bosun.org/slog/
| ├── ... (slog files)
Wer jedoch github.com/me/helloworld
$GOPATH/src/bosun.org/slog/
möglicherweise keinen Ordner $GOPATH/src/bosun.org/slog/
, wodurch der Build aufgrund fehlender Pakete fehlschlägt.
Wenn Sie den folgenden Befehl an der Eingabeaufforderung ausführen, werden alle externen Pakete aus Ihrem Go-Paket abgerufen und die erforderlichen Bits in einen Herstellerordner gepackt:
govendor add +e
Dadurch wird govendor angewiesen, alle externen Pakete zu Ihrem aktuellen Repository hinzuzufügen.
Die Verzeichnisstruktur Ihrer Anwendung würde jetzt so aussehen:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── vendor/
| | ├── bosun.org/slog/
| | | ├── ... (slog files)
| ├── hello.go
und diejenigen, die Ihr Repository klonen, erhalten auch die erforderlichen Pakete von Drittanbietern.
Verwalten von ./vendor mithilfe von Papierkorb
trash
ist ein minimalistisches Verkaufstool, das Sie mit der Datei vendor.conf
konfigurieren. Dieses Beispiel ist für den trash
selbst:
# 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
Die erste Zeile ohne Kommentar ist das Paket, für das wir ./vendor verwalten (Hinweis: Dies kann buchstäblich jedes Paket in Ihrem Projekt sein, nicht nur das Stammpaket).
Kommentierte Zeilen beginnen mit #
.
Jede nicht leere und nicht kommentierte Zeile enthält eine Abhängigkeit. Es muss nur das "root" -Paket der Abhängigkeit aufgeführt werden.
Nach dem Paketnamen wird die Version (Festschreiben, Tag oder Zweig) und optional die URL des Paket-Repositorys angegeben (standardmäßig wird sie aus dem Paketnamen abgeleitet).
Um Ihr ./vendor-Verzeichnis aufzufüllen, müssen Sie die vendor.conf
Datei im aktuellen vendor.conf
haben. vendor.conf
Sie einfach vendor.conf
aus:
$ trash
Der Papierkorb klappt die verkauften Bibliotheken in ~/.trash-cache
(standardmäßig), checkt die angeforderten Versionen aus, kopiert die Dateien in das ./vendor
und entfernt nicht importierte Pakete und Testdateien . Dieser letzte Schritt sorgt dafür, dass Ihr ./vendor lean und mean bleibt und Platz in Ihrem Projekt-Repo einspart.
Hinweis: Ab v0.2.5 steht Papierkorb für Linux und MacOS zur Verfügung und unterstützt nur git zum Abrufen von Paketen, da gits das beliebteste ist. Wir arbeiten jedoch daran, alle anderen go get
unterstützt werden.
Verwenden Sie golang / dep
golang / dep ist ein Werkzeug zum Management von Prototypabhängigkeiten. Bald ein offizielles Versionierungswerkzeug. Aktueller Status Alpha .
Verwendungszweck
Holen Sie sich das Tool über
$ go get -u github.com/golang/dep/...
Eine typische Verwendung für ein neues Repo könnte sein
$ dep init $ dep ensure -update
Um eine Abhängigkeit auf eine neue Version zu aktualisieren, können Sie sie ausführen
$ dep ensure github.com/pkg/errors@^0.8.0
Beachten Sie, dass die Dateiformate für Manifeste und Sperren jetzt abgeschlossen wurden . Diese bleiben auch bei einem Werkzeugwechsel kompatibel.
vendor.json mit dem 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
Beispiel 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"
}