Maison >Problème commun >Une brève discussion sur Govendor, l'outil de gestion des dépendances des packages Go

Une brève discussion sur Govendor, l'outil de gestion des dépendances des packages Go

little bottle
little bottleavant
2019-04-29 13:45:283821parcourir
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.

Fonctionnalités du fournisseur

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 :

  • Le répertoire des fournisseurs sous le package actuel
  • Répertoire ascendant Recherchez jusqu'à ce que vous trouviez le répertoire du fournisseur sous src
  • Regardez sous le répertoire GOROOT
  • Recherchez les packages dépendants sous GOPATH

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.

Recommandations d'utilisation des fournisseurs

  • Un projet de bibliothèque (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 Introduction

govendor est une gestion de packages basée sur le répertoire vendor outil de mécanisme.

  • prend en charge l'analyse des packages dépendants du code source du projet et leur copie de $GOPATH vers le répertoire vendor du projet.
  • prend en charge la version spécifiée du package et utilise Effectuez la gestion des packages et des versions, qui est similaire aux supports vendor/vendor.json de PHP en utilisant la commande Composer pour copier les packages dépendants de
  • If le fichier govendor add/update. est ignoré, il peut être utilisé $GOPATH Restaurer les packages de dépendances
  • peut être utilisé directement vendor/*/ Ajouter ou mettre à jour les packages de dépendances govendor sync
  • Disponible
  • Migration en un clic depuis d'autres govendor fetch outils de gestion de packages pour
  • govendor migratePrend en charge Linux, macOS, Windows et même tous les systèmes d'exploitation existantsvendorgovendorPrend en charge Git, Hg, SVN, BZR (doit spécifier un chemin)
  • Utilisation du gouvernement
  • Exigences :

Le projet doit être dans le répertoire

    Si la version Go est 1.5, vous devez définir les variables d'environnement manuellement
  • $GOPATH/src
  • Installerset GO15VENDOREXPERIMENT=1
    go get -u github.com/kardianos/govendor
  • Afin d'utiliser
de manière pratique et rapide, il est recommandé d'ajouter

à PATH. Linux/macOS est défini comme suit :

export PATH="$GOPATH/bin:$PATH"

Initialisationgovendor$GOPATH/binExécutez la commande suivante dans le répertoire racine du projet pour

initialiser :

govendor init

Il sera automatiquement généré dans le répertoire racine du projet

répertoires et vendor fichiers. À l'heure actuelle, le contenu du fichier

est :

{
    "comment": "",
    "ignore": "test",
    "package": [],
    "rootPath": "govendor-example"
}
vendorCommandes communesvendor.jsonvendor.json

Copiez tous les packages qui ont été référencés et sous

dans le répertoire

  • govendor add +external
    $GOPATHvendorCopier uniquement le package spécifié à partir de
    govendor add gopkg.in/yaml.v2
  • $GOPATHListe tous les packages référencés dans le code et leur statut
govendor 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
  • Liste les packages par lesquels un package est référencé
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
  • Ajouter ou mettre à jour un package à partir du référentiel distant (
  • ne sera pas
dans
    Enregistrez également une copie)
  • govendor fetch golang.org/x/net/context
    $GOPATHInstallez la version spécifiée du package
govendor 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".
  • Formatez uniquement le propre code du projet (
  • ne change pas)
    govendor fmt +local
  • vendorConstruire uniquement les packages à l'intérieur du projet compilé
govendor install +local
  • Tester uniquement les cas de test à l'intérieur du projet
govendor test +local
  • Construisez tous les
  • packages
    govendor install +vendor,^program
  • vendorTirez tous les packages dépendants vers le répertoire
  • (y compris les
packages existants ou non existants)
    Le package
  • govendor fetch +out
    vendor$GOPATH est déjà dans le répertoire
  • , mais je souhaite le mettre à jour depuis
    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>
  • $GOPATHForker 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
  • extraira désormais le code de
au lieu de
    . Les informations sur le package de dépendances sont enregistrées dans

Comment extraire les mises à jour myforknormal

govendor sync

sous-commande du gouverneur
  • L'utilisation détaillée de chaque sous-commande peut être. trouvé via vendor.json Ou lisez
  • pour voir comment le package source est implémenté.
子命令 功能
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 命令

Paramètres d'état du gouverneur

状态 缩写 含义
+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

Modules Go

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer