govendor
go vendor 是 go 1.6 官方正式引入的包管理方式。
其基本思路是,将引用的外部包的源代码放在当前工程的vendor目录下面,go 编译时会优先从vendor目录寻找依赖关系。
包状态类型
首先要知道govendor对包状态的分类:
| 状态 | 缩写 | 含义 |
|---|---|---|
| +local | l | packages in your project 本地包,即项目自身的包组织 |
| +external | e | 被引用、在$GOPATH下找得到、但当前项目不存在的包 |
| +vendor | v | 已被 govendor 管理,即在 vendor 目录下 |
| +std | s | 标准库中的包 |
| +excluded | x | 明确从vendoring中排除的外部包 |
| +unused | u | 未使用的包,即包在 vendor 目录下,但项目并没有用到 |
| +missing | m | 代码引用了依赖包,但该包并没有找到 |
| +program | p | 主程序包,意味着可以编译为执行文件 |
| +outside | +external +missing | |
| +all | 所有的包 |
常用的三种为:
external: 放在$GOPATH下被依赖的包(最常用)local: 项目自身的包vendor: 被govendor管理的,放在vendor目录下的包
命令
| 命令 | 功能 |
|---|---|
| init | 初始化 vendor 目录 |
| list | 列出所有的依赖包 |
| add | 添加包到 vendor 目录,如 govendor add +external 添加所有外部包,也可以直接跟包名,如 govendor add golang.org/x/net/internal/socket |
| update | 从 $GOPATH 更新依赖包到 vendor 目录 |
| remove | 从 vendor 管理中删除依赖(add 的反操作) |
| status | 列出所有缺失、过期和修改过的包 |
| fetch | 添加或更新包到本地 vendor 目录 |
| sync | 本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本 |
| get | 类似 go get 目录,拉取依赖包到 vendor 目录 |
基本操作
govendor status: 查看当前包状态
govendor list +e: 查看当前项目的依赖但是未被添加到vendor中的包
govendor add +e: 添加依赖的包。如果vendor.json中存在,但是vendor目录下不存在(即govendor status显示缺失)的包也会被重新添加
govendor remove +u: 删除在vendor下但是未依赖的包
在实际过程中,有部分包是团队的公共包。
这部分包通常有自己的单独项目,并且已经被我们添加到$GOPATH下,可能就不需要添加到当前项目的vendor下。
这时候可以结合list和add来使用,
先用list -no-status +e列出依赖包,然后使用grep过滤,再调用add命令添加:
| |