Golang可以自由地引用Git仓库中的代码,这样就带来了依赖包版本管理的问题。
HTTP_PROXY=127.0.0.1:53100 HTTPS_PROXY=127.0.0.1:53100 go get golang.org/x/text
早期Golang本身没有提供依赖包管理的功能,可以通过一个独立的Godep工具进行管理。
通过以下命令,可以直接保存项目引用的第三方代码以及版本信息:
godep save #保存当前目录下的go文件(不遍历子目录)引用的第三方代码
godep save ./... #保存当前目录以及子目录下的go文件引用的第三方代码
在Golang 1.5之前,Godep将版本信息和第三方代码保存的Godeps目录下。
在Golang 1.5以后,Godep将版本信息保存在Godeps目录中,将第三方代码保存在vendor目录。
vendor是1.5中的一个试验特性,在1.6版本中被正式引入。编译过程中,会先引用vendor目录中的代码。
对于同样的代码main.go:
package main
import (
"github.com/lijiaocn/GoPkgs/version"
)
func main() {
version.Show()
}
没有vendor之前,项目vendor_test目录结构如下:
▾ vendor_test/
▾ main/
main.go
main.go中引用的是$GOPATH/github.com/lijiaocn/GoPkgs/version中的文件。
使用vendor之后,目录结构如下:
▾ vendor_test/
▸ Godeps/
▾ main/
main.go
▾ vendor/
▾ github.com/
▾ lijiaocn/
▾ GoPkgs/
▸ version/
LICENSE
main.go中引用的是vendor/github.com/lijiaocn/GoPkgs/version中的文件。
不需要对main.go做任何修改。