Maison >Problème commun >Une brève discussion sur Govendor, l'outil de gestion des dépendances des packages Go
govendor est un outil en ligne de commande de gestion des dépendances des packages Go basé sur le mécanisme vendor
. Intégration non intrusive avec les fournisseurs natifs et prend également en charge la migration à partir d'autres outils de gestion des dépendances. Il peut facilement réaliser le développement et la gestion de différentes versions du même package dans différents projets sans intrusion mutuelle.
Au début, Go ne fournissait pas d'outil de gestion de packages approprié. La fonctionnalité fournisseur est disponible à partir de la version 1.5, mais nécessite le réglage manuel des variables d'environnement GO15VENDOREXPERIMENT=1
.
Lors de l'exécution de la commande go build
ou go run
, le package sera recherché dans l'ordre suivant :
Lorsque la version 1.6 est publiée, ceci variable d'environnement La valeur de a été définie sur 1 par défaut et la valeur peut être visualisée à l'aide de la commande go env
.
Lors de la sortie de la version 1.7, cette variable d'environnement a été supprimée et la fonctionnalité vendor
a été activée par défaut.
main
qui ne contient pas package
) ne doit pas stocker de packages externes dans le répertoire vendor
dans son propre contrôle de version, à moins qu'il y ait une raison particulière et que vous sachiez pourquoi vous voulez le faire. Dans une application (y compris main
et package
), il est recommandé qu'il n'y ait qu'un seul répertoire vendor
, et il se trouve au niveau du répertoire de base du code.
Tutoriels associés : tutoriel vidéo go
govendor est une gestion de packages basée sur le répertoire vendor
outil de mécanisme.
$GOPATH
vers le répertoire vendor
du projet. vendor/vendor.json
de PHP en utilisant la commande Composer
pour copier les packages dépendants de govendor add/update
. est ignoré, il peut être utilisé $GOPATH
Restaurer les packages de dépendances vendor/*/
Ajouter ou mettre à jour les packages de dépendances govendor sync
govendor fetch
outils de gestion de packages pour govendor migrate
Prend en charge Linux, macOS, Windows et même tous les systèmes d'exploitation existantsvendor
govendor
Prend en charge Git, Hg, SVN, BZR (doit spécifier un chemin)$GOPATH/src
set GO15VENDOREXPERIMENT=1
go get -u github.com/kardianos/govendor
export PATH="$GOPATH/bin:$PATH"
Initialisationgovendor
$GOPATH/bin
Exécutez la commande suivante dans le répertoire racine du projet pour
govendor init
répertoires et vendor
fichiers. À l'heure actuelle, le contenu du fichier
{ "comment": "", "ignore": "test", "package": [], "rootPath": "govendor-example" }
vendor
Commandes communesvendor.json
vendor.json
Copiez tous les packages qui ont été référencés et sous govendor add +external
$GOPATH
vendor
Copier uniquement le package spécifié à partir de govendor add gopkg.in/yaml.v2
$GOPATH
Liste tous les packages référencés dans le code et leur statutgovendor list
e github.com/gin-contrib/sse e github.com/gin-gonic/gin e github.com/gin-gonic/gin/binding e github.com/gin-gonic/gin/internal/json e github.com/gin-gonic/gin/render e github.com/golang/protobuf/proto e github.com/mattn/go-isatty e github.com/ugorji/go/codec e gopkg.in/go-playground/validator.v8 e gopkg.in/yaml.v2 pl govendor-example m github.com/json-iterator/go m golang.org/x/sys/unix
govendor list -v fmt
s fmt ├── e github.com/gin-contrib/sse ├── e github.com/gin-gonic/gin ├── e github.com/gin-gonic/gin/render ├── e github.com/golang/protobuf/proto ├── e github.com/ugorji/go/codec ├── e gopkg.in/go-playground/validator.v8 ├── e gopkg.in/yaml.v2 └── pl govendor-example
govendor fetch golang.org/x/net/context
$GOPATH
Installez la version spécifiée du packagegovendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55 govendor fetch golang.org/x/net/context@v1 # Get latest v1.*.* tag or branch. govendor fetch golang.org/x/net/context@=v1 # Get the tag or branch named "v1".
govendor fmt +local
vendor
Construire uniquement les packages à l'intérieur du projet compilégovendor install +local
govendor test +local
govendor install +vendor,^program
vendor
Tirez tous les packages dépendants vers le répertoire govendor fetch +out
vendor
$GOPATH
est déjà dans le répertoire govendor update +vendor
vendor
a modifié un. package dans $GOPATH
. Maintenant, je souhaite mettre à jour le package modifié et non validé vers govendor update -uncommitted <updated-package-import-path>
$GOPATH
Forker un package, mais pas encore fusionné, comment référencer le dernier package de code <.>vendor
govendor fetch github.com/normal/pkg::github.com/myfork/pkg
Comment extraire les mises à jour myfork
normal
govendor syncsous-commande du gouverneur
vendor.json
Ou lisez 子命令 | 功能 |
---|---|
init | 创建 vendor 目录和 vendor.json 文件 |
list | 列出&过滤依赖包及其状态 |
add | 从 $GOPATH 复制包到项目 vendor 目录 |
update | 从 $GOPATH 更新依赖包到项目 vendor 目录 |
remove | 从 vendor 目录移除依赖的包 |
status | 列出所有缺失、过期和修改过的包 |
fetch | 从远程仓库添加或更新包到项目 vendor 目录(不会存储到 $GOPATH ) |
sync | 根据 vendor.json 拉取相匹配的包到 vendor 目录 |
migrate | 从其他基于 vendor 实现的包管理工具中一键迁移 |
get | 与 go get 类似,将包下载到 $GOPATH ,再将依赖包复制到 vendor 目录 |
license | 列出所有依赖包的 LICENSE |
shell | 可一次性运行多个 govendor 命令 |
状态 | 缩写 | 含义 |
---|---|---|
+local | l | 本地包,即项目内部编写的包 |
+external | e | 外部包,即在 GOPATH 中、却不在项目 vendor 目录 |
+vendor | v | 已在 vendor 目录下的包 |
+std | s | 标准库里的包 |
+excluded | x | 明确被排除的外部包 |
+unused | u | 未使用的包,即在 vendor 目录下,但项目中并未引用到 |
+missing | m | 被引用了但却找不到的包 |
+program | p | 主程序包,即可被编译为执行文件的包 |
+outside | 相当于状态为 +external +missing
|
|
+all | 所有包 |
Les sous-commandes qui prennent en charge les paramètres d'état sont : list
, add
, update
, remove
, fetch
Ce qui est génial, c'est qu'à partir de la version Go 1.11, l'officiel a intégré des modules Go plus puissants pour unifier la situation chaotique de la gestion des dépendances des packages Go depuis de nombreuses années (l'outil dep officiellement lancé par Go avant Il était presque mort-né) et sera officiellement activé par défaut dans la version 1.13.
Il a été privilégié et fortement recommandé par la communauté. Il est recommandé aux nouveaux projets d'utiliser les modules Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!