包管理工具govendor
一、go找包逻辑
在执行 go build 或 go run 命令时,会按照以下顺序去查找包:
- 当前包下的
vendor目录 - 向上级目录查找,直到找到
src下的vendor目录 - 在
GOROOT目录下查找 - 在
GOPATH下面查找依赖包
二、vendor使用建议
- 一个库工程(不包含
main的package)不应该在自己的版本控制中存储外部的包在vendor目录中,除非有特殊原因并且知道为什么要这么做。 - 在一个应用中,(包含
main的package),建议只有一个vendor目录,且在代码库一级目录。
三、govendor 简介
govendor 是一个基于 vendor 目录机制的包管理工具。
- 支持从项目源码中分析出依赖的包,并从
$GOPATH复制到项目的vendor目录下 - 支持包的指定版本,并用
vendor/vendor.json进行包和版本管理,这点与 PHP 的Composer类似 - 支持用
govendor add/update命令从$GOPATH中复制依赖包 - 如果忽略了
vendor/*/文件,可用govendor sync恢复依赖包 - 可直接用
govendor fetch添加或更新依赖包 - 可用
govendor migrate从其他vendor包管理工具中一键迁移到govendor - 支持
Linux,macOS,Windows,甚至现有所有操作系统 - 支持
Git、Hg、SVN,BZR(必须指定一个路径)
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的包命令
命令解析:
| 状态 | 缩写状态 | 含义 |
|---|---|---|
+local | l | 本地包,即项目自身的包组织 |
+external | e | 外部包,即被 $GOPATH 管理,但不在 vendor 目录下 |
+vendor | v | 已被 govendor 管理,即在 vendor 目录下 |
+std | s | 标准库中的包 |
+unused | u | 未使用的包,即包在 vendor 目录下,但项目并没有用到 |
+missing | m | 代码引用了依赖包,但该包并没有找到 |
+program | p | 主程序包,意味着可以编译为执行文件 |
+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
本文详细介绍了govendor这一基于vendor目录机制的包管理工具。包括go语言查找包的逻辑、vendor目录的使用建议、govendor的功能特性及常用命令。通过实例演示如何初始化vendor目录、添加依赖包、更新包版本等操作。
7696

被折叠的 条评论
为什么被折叠?



