安装:
1、mac:brew Install godep,全局可用
2、go get -u -v github.com/tools/godep
参数-u表示更新,-v可以看到进度信息。成功安装后,在$GOPATH的bin目录
下会有一个godep可执行的二进制文件,后面执行的命令都是用这个,建议这个目录加入到全局环境变量中
Godeps.json文件
Godeps.json文件描述了工程依赖项。Godeps.json文件位于工程目录的子目录Godeps下
包管理使用 godep
工程目录应当是$GOPATH的子目录。以下命令都是在工程的根目录运行
拉取依赖 restore 用于开发:godep restore
如果下载的项目中只有Godeps.json文件,而没有包含第三库则可以使用godep restore这个命令将所有的依赖库下载到$GOPATH\src
中用于开发,godep restore执行时,godep会按照Godeps/Godeps.json
内列表,依次执行go get -d -v
来下载对应依赖包到GOPATH路径下;
godep restore将Godeps/Godeps.json文件中指定的包安装到$GOPATH目录。
godep restore
,可以将vendor下的代码反向拷贝到$GOPATH下。
检出依赖 :godep save
扫描本项目的代码,将项目依赖的包及该包的版本号(即git commit)记录到Godeps/Godeps.json文件中;将依赖的代码从GOPATH/src中copy到vendor目录(忽略原始代码的.git目录)。
自动扫描当前目录所属包中import的所有外部依赖库(非系统库)
将所有的依赖库下载下来到当前工程中,产生文件
Godeps\Godeps.json
在没有
Godeps\
文件的情况下,生成依赖目录vendor\
文件夹
godep save会将工程依赖项复制到工程目录的vendor/子目录下。在这个过程中,以下文件不会复制
- 没有纳入版本管理的文件
- *test.go
- testdata目录
- go包外的其他文件
godep 编译运行 build
项目用godep管理后,要编译和运行项目的时候再用go run和go build显然就不行
因为go命令是直接到GOPATH目录下去找第三方库,且在1.6以后支持
vendor
方式编译,而使用godep下载的依赖库放到Godeps/workspace目录下的,但是不影响继续使用依赖GOPATH目录,所以与三方工具本身不冲突
故使用
godep go build XXX
godep中的go命令,就是将原先的go命令加了一层壳,执行godep go的时候,会将当前项目的workspace目录加入GOPATH变量中
增加新的依赖包:
- Run go get foo/bar
- Edit your code to import foo/bar.
- Run godep save (or godep save ./…).
如果要更新依赖包:
- Run go get -u foo/bar
- Run godep update foo/bar. (You can use the … wildcard, for example godep update foo/…).
Godeps目录的作用
godep save时godep把所有依赖包代码从GOPATH路径拷贝到Godeps目录下,并去除代码管理目录。这个用处主要是为了支撑godep go tool的一系列操作,尤其是git clone了代码库下来后,通常直接用godep go install xxx即可完成编译,一定程度上能够缓解golang比较严格的代码路径和包管理带来的烦恼。
而在使用IDE时
,可以通过把vendor
添加到GOPATH实现代码跳转和编译等功能,比较方便
vendor
依赖GOPATH来解决go import有个很严重的问题:如果项目依赖的包做了修改,或者干脆删掉了,会影响我的项目。
那么vendor属性的作用就是让go编译时,优先从项目源码树根目录下的vendor目录查找代码(可以理解为切了一次GOPATH),如果vendor中有,则不再去GOPATH中去查找。注意,必须将依赖包拷贝到$GOPATH/src目录中,否则go会无视vendor目录,仍然去$GOPATH/src中去找依赖包。