govendor包管理工具

本文详细介绍了govendor这一基于vendor目录机制的包管理工具。包括go语言查找包的逻辑、vendor目录的使用建议、govendor的功能特性及常用命令。通过实例演示如何初始化vendor目录、添加依赖包、更新包版本等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

包管理工具govendor

一、go找包逻辑

在执行 go buildgo run 命令时,会按照以下顺序去查找包:

  • 当前包下的 vendor 目录
  • 向上级目录查找,直到找到 src 下的 vendor 目录
  • GOROOT 目录下查找
  • GOPATH 下面查找依赖包

二、vendor使用建议

  • 一个库工程(不包含 mainpackage)不应该在自己的版本控制中存储外部的包在 vendor 目录中,除非有特殊原因并且知道为什么要这么做。
  • 在一个应用中,(包含 mainpackage),建议只有一个 vendor 目录,且在代码库一级目录。

三、govendor 简介

govendor 是一个基于 vendor 目录机制的包管理工具。

  • 支持从项目源码中分析出依赖的包,并从 $GOPATH 复制到项目的 vendor 目录下
  • 支持包的指定版本,并用 vendor/vendor.json 进行包和版本管理,这点与 PHP 的 Composer 类似
  • 支持用 govendor add/update 命令从 $GOPATH 中复制依赖包
  • 如果忽略了 vendor/*/ 文件,可用 govendor sync 恢复依赖包
  • 可直接用 govendor fetch 添加或更新依赖包
  • 可用 govendor migrate 从其他 vendor 包管理工具中一键迁移到 govendor
  • 支持 LinuxmacOSWindows,甚至现有所有操作系统
  • 支持 GitHgSVNBZR(必须指定一个路径)

go中所有的project代码都要放在GoPATH下的src目录下,因而会存在全局GoPATH和项目的GoPATH。本地开发,可以直接都放在全局的GoPATH下,然后每个项目用govendor的方式添加相关依赖包

我们可以直接在命令行输入如下命令
go get -u github.com/kardianos/govendor
进行安装
接着使用一套连招:

govendor init # 创建vendor目录,创建vendor.json文件  
govendor add +external #生成依赖包(添加外部包,不包含项目代码)  
govendor update +vendor # 更新vendor的包命令

命令解析:

状态缩写状态含义
+locall本地包,即项目自身的包组织
+externale外部包,即被 $GOPATH 管理,但不在 vendor 目录下
+vendorv已被 govendor 管理,即在 vendor 目录下
+stds标准库中的包
+unusedu未使用的包,即包在 vendor 目录下,但项目并没有用到
+missingm代码引用了依赖包,但该包并没有找到
+programp主程序包,意味着可以编译为执行文件
+outside外部包和缺失的包
+all所有的包
命令功能
init初始化 vendor 目录
list列出所有的依赖包
add添加包到 vendor 目录,如 govendor add +external 添加所有外部包
add PKG_PATH添加指定的依赖包到 vendor 目录
update从 $GOPATH 更新依赖包到 vendor 目录
remove从 vendor 管理中删除依赖
status列出所有缺失、过期和修改过的包
fetch添加或更新包到本地 vendor 目录
sync本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本
get类似 go get 目录,拉取依赖包到 vendor 目录

命令举例:

govendor add +local   #会将本地的项目包(代码)也添加到vendor目录下 

# 拉取最新包(指定版本,按版本拉,不指定按最新拉)
govendor fetch github.com/astaxie/beego@=v1.10.0

# 同步依赖包(如果某个包误删,verdor.json存在即可依其进行拉取)
govendor sync
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值