dep 是一个 golang 依赖管理工具,需要在 Go 1.7 及更高的版本中使用。
1. 安装
安装 dep 工具的方式有很多种,如果是 mac 电脑的话,只需要如下命令:
brew install dep
对于 Linux 和类 Unix 系统而言,我们还可以使用如下方式安装 dep:
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
或者直接使用源码安装。
而对于 windows 电脑,可以使用命令行:
go get -u github.com/golang/dep/cmd/dep
会自动下载到 go_path/bin/目录下,你需要将 go_path/bin 加入到环境变量中。
如果这种方式下载不下来,你也可以手动下载:
2. 使用
安装完毕再命令行下敲入 dep 命令:
$ dep
Dep is a tool for managing dependencies for Go projects
Usage: "dep [command]"
Commands:
init Set up a new Go project, or migrate an existing one
status Report the status of the project's dependencies
ensure Ensure a dependency is safely vendored in the project
prune Pruning is now performed automatically by dep ensure.
version Show the dep version information
Examples:
dep init set up a new project
dep ensure install the project's dependencies
dep ensure -update update the locked versions of all dependencies
dep ensure -add github.com/pkg/errors add a dependency to the project
Use "dep help [command]" for more information about a command.
如上:
init 命令用来初始化项目;
status 命令用来查看当前项目的依赖状态;
ensure 命令用来同步依赖包
3. 初始化
切换到你的工程目录下:
cd $GOPATH/src/goProject
假设项目现在是空的,什么也没有,进行初始化:
dep init -v
注意:因为墙的原因,,,不一定我们能成功的拉下来依赖,使用 dep init 尽量带上-v:
-v enable verbose logging (default: false)
如果半分钟没响应就 ctrl+c 中断,就可以看到 fail 的原因,dep 遇到一些错误不会立马报错(特别是网络原因) 。
执行成功之后会生成两个文件 Gopkg.lock、Gopkg.toml 和一个文件夹 vendor
Gopkg.toml 文件记录着 current project 依赖项 project 的约束。
Gopkg.toml 参数解释:
[[constraint]]: 这个约束主要体现在到底要采用目标 project 的某个 tag 的版本(version),还是某个 branch,或者是某个 revision,这三个对于一个 constraint 只能选一个。
[[override]]:有时项目依赖比较复杂,经常会遇到依赖冲突导致 dep ensure 命令无法执行成功,这个时候使用 override 消除单个依赖关系上多个不可调和的 constraint 声明之间的分歧
[[required]]:列出了必须包含在 Gopkg.lock 中的一组包
[[ignored]]:列出 dep 静态分析源代码时忽略的一组包
[[prune]]:prune 为依赖关系定义全局和每个项目的 prune 选项。 这些选项决定写入 vendor/时丢弃哪些文件unused-packages:修剪掉来自于目录中,但是没有出现在包导入图中的文件
non-go:修剪掉非.go 文件
go-tests:修剪掉 Go 的测试文件
Gopkg.lock 文件是工具生成的,你不用手工编辑
vendor 文件里面存放 current project 的远程依赖的源代码
当需要指定目标 project 使用哪一个 version 时,可以在 Gopkg.toml 中添加。如,需要指定 alice 版本为 0.8.4,在 Gopkg.toml 中添加:
[[constraint]]
name = "github.com/golang/dep"
version = "=0.8.4"
然后执行
dep ensure -update "github.com/golang/dep
在指定 version 的时候,如果指定 semantic version,可选的符号有=: 只选择对应 version
>或<:>
>=或<=: 大于等于(或小于等于)对应版本号
~: ~1.2.3 表示 >=1.2.3,<1.3.0
^: ^1.2.3 表示 >1.2.3,<2.0.0
不指定符号的话,默认为^符号。
有了包管理工具之后,好处还是挺多:帮你锁住依赖版本,防止第三方包升级导致代码不兼容;
将项目的依赖都放在 vendor 下,就不用依赖 gopath 下的公共包了;
4. 添加依赖
依赖管理帮助
`dep help ensure`
添加一条依赖
`dep ensure -add github.com``/bitly/go-simplejson`
一次性添加多条依赖
`dep ensure -add github.com``/pkg/errors` `github.com``/bitly/go-simplejson`
添加依赖指定依赖版本
`dep ensure -add github.com``/bitly/go-simplejson``@=0.4.3`
添加后记住执行 dep ensure 确保同步
`dep ensure -``v`
如果执行 dep ensure 出错,看下 Gopkg.toml 文件中是否同时配置了 version,branch 和 revision。