Recherche…
Remarques
Le service de vente est une méthode qui garantit que tous les packages tiers que vous utilisez dans votre projet Go sont cohérents pour tous ceux qui développent pour votre application.
Lorsque votre package Go importe un autre package, le compilateur vérifie normalement $GOPATH/src/
pour le chemin du projet importé. Toutefois , si votre paquet contient un dossier nommé vendor
, le compilateur vérifiera dans ce dossier en premier. Cela signifie que vous pouvez importer des paquets d'autres parties dans votre propre référentiel de codes, sans avoir à modifier leur code.
Vendoring est une fonctionnalité standard de Go 1.6 et versions ultérieures. Dans Go 1.5, vous devez définir la variable d'environnement GO15VENDOREXPERIMENT=1
pour permettre la vente.
Utiliser govendor pour ajouter des packages externes
Govendor est un outil utilisé pour importer des packages tiers dans votre référentiel de code d'une manière compatible avec la vente de golang.
Dites par exemple que vous utilisez un package tiers bosun.org/slog
:
package main
import "bosun.org/slog"
func main() {
slog.Infof("Hello World")
}
Votre structure de répertoire peut ressembler à:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── hello.go
├── bosun.org/slog/
| ├── ... (slog files)
Cependant, une personne qui clone github.com/me/helloworld
peut ne pas avoir $GOPATH/src/bosun.org/slog/
, ce qui provoque l'échec de leur compilation en raison de paquets manquants.
L'exécution de la commande suivante à l'invite de commandes permet de récupérer tous les packages externes de votre package Go et de regrouper les bits requis dans un dossier fournisseur:
govendor add +e
Cela demande à govendor d'ajouter tous les packages externes dans votre référentiel actuel.
La structure des répertoires de votre application ressemblerait maintenant à:
$GOPATH/src/
├── github.com/me/helloworld/
| ├── vendor/
| | ├── bosun.org/slog/
| | | ├── ... (slog files)
| ├── hello.go
et ceux qui clonent votre dépôt vont également récupérer les paquets tiers requis.
Utiliser la corbeille pour gérer ./vendor
trash
est un outil de vente minimaliste que vous configurez avec le fichier vendor.conf
. Cet exemple est pour la trash
elle-même:
# 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
La première ligne sans commentaire est le package que nous gérons ./vendor pour (note: cela peut être littéralement n'importe quel paquet dans votre projet, pas seulement le paquet racine).
Les lignes commentées commencent par #
.
Chaque ligne non vide et sans commentaire répertorie une dépendance. Seul le package "root" de la dépendance doit être répertorié.
Après le nom du package va la version (commit, tag ou branche) et éventuellement l'URL du référentiel de package (par défaut, il est déduit du nom du package).
Pour remplir votre répertoire ./vendor, vous devez avoir le fichier vendor.conf
dans le répertoire en cours et exécuter simplement:
$ trash
La corbeille va cloner les bibliothèques vendues dans ~/.trash-cache
(par défaut), extraire les versions demandées, copier les fichiers dans ./vendor
dir et élaguer les paquets et les fichiers de test non importés . Cette dernière étape permet de maintenir votre budget ./vendor à un niveau raisonnable et de gagner de la place dans votre dépôt de projet.
Note: comme des ordures v0.2.5 est disponible pour Linux et Mac OS, et ne supporte que git pour récupérer les paquets, comme git est le plus populaire, mais nous travaillons sur l' ajout de tous les autres qui go get
soutien.
Utilisez golang / dep
golang / dep est un outil prototype de gestion des dépendances. Bientôt un outil de versioning officiel. État actuel Alpha .
Usage
Obtenez l'outil via
$ go get -u github.com/golang/dep/...
L'utilisation typique sur un nouveau repo pourrait être
$ dep init $ dep ensure -update
Pour mettre à jour une dépendance vers une nouvelle version, vous pouvez exécuter
$ dep ensure github.com/pkg/errors@^0.8.0
Notez que les formats de fichier manifeste et verrou ont maintenant été finalisés . Ceux-ci resteront compatibles même si l'outil change.
vendor.json utilisant l'outil Govendor
# 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
Exemple 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"
}