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"

}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow