golang没有提供包管理工具,只是提供了一个全局的包管理。不过对于一些项目来说,需要一个包管理工具,经过一番google后,最后选择了godep这个工具。
对于这个工具的使用觉得并不是很满意。经常有一些问题,不知道如何解决。有时候昨天不成功,今天有Ok了。真是搞到头大。目前对于一些问题还是不太确认是什么问题。估计是对这个工具的理解不够。
这里讲一下使用技巧和一些注意事项。
1、建立依赖json文件。在项目的根目录下运行下边命令。
godep save 或者用 godep save ./…
注意你需要在这个目录运行go build 可以成功编译。就可以。另外你需要把文件Godeps/Godeps.json添加到代码管理中,那样才方便别人下载项目和更新依赖包。,godep save 同时把依赖包的代码都copy到Godeps/_workspace/src目录下,而且把依赖包的git管理目录.git去掉了。你可以把这些依赖包一并上传到你的项目代码管理中,这样别人下载你的代码库的时候就可以直接编译,不需要下载更新依赖包。但是你的代码库会相对大一些,同时也会出现一些其他一些版本问题。
2、下载依赖包
godep restore
这个命令是根据Godeps/Godeps.json文件把项目的依赖包下载到$GOPATH目录下。另外看一看下边的脚本,千万别学他。这个脚本我是参考wandoulabs/codis的项目中的一个编译脚本编写的。就因为这个,我踩坑了。
make clean
echo “downloading dependcies, it may take a few minutes…”
# Test godep install, steal it from LedisDB project 😛
godep path > /dev/null 2>&1
if [ “$?” = 0 ]; then
GOPATH=`godep path`:$GOPATH
godep restore
go build || exit $?
exit 0
fi
如果这个脚本你只是用来编译一些已经完成的项目,或者在服务器做自动编译集成就没有问题。如果在开发环境上就不要这样做。因为这样他会在Godeps/_workspace/目录中下载依赖包,而且不会去除git的信息,Godeps/_workspace/目录的文件你是不方便上存上自己的代码服务器的。而且你更新依赖包的后,或者添加新的依赖包到项目中,再使用godep save会出现一些包找不到,因为godep save不会从Godeps/_workspace/目录中找包的。之前因为查看这个脚本,使用我一路以为依赖包下载应该下载到Godeps/_workspace/目录下,其实不是,如果是开发环境下应该下载到系统的$GOPATH中的。
3、编译代码
编译代码可以有两种情况。
a、你的代码库已经把依赖包Godeps/_workspace/目录下的代码文件都上传到代码管理工具,你可以用下边的命令进行编译。
godep go build
godep go 命令只不过是在运行go命令的时候,把Godeps/_workspace/目录添加到GOPATH中。
b、如果你代码库没有把依赖包的代码上存到代码管理工具,你的依赖包在$GOPATH中。
go bulid
感觉这个工具需要了解好golang的包管理思维,和这个软件godep作者对Godeps/_workspace/这个目录的思维。它与其他语言的包依赖思维是有点不一样的。好像node.js是自己项目下有一个依赖库目录路径,各个项目是不会相互影响的。 这个Godeps/_workspace/虽然有点像是独立的依赖目录。但是他不是给你项目开发环境使用的独立依赖包目录,而是对你依赖包环境的一个copy。方便别人编译而已。对于开发环境的依赖包的安装,还是建议你安装在系统的$GOPATH中。Godeps/_workspace/目录下的依赖包只是一个镜像。
还有如果你删除了Godeps/_workspace/目录下的文件,重新运行godep save是不会重新copy代码到这个目录中的。不清楚是什么原因,可能是bug也可能是软件作者设计的原因。