Go语言包管理工具Godep的用法
作者:奋斗的大橙子 时间:2024-02-20 04:09:44
一、为什么要包管理
默认Go的第三方包都是放在Gopath的src目录下,而且这些包都没有版本号的概念,这样的可能会出现一些问题。
举个例子:当A同事将开发完程序之后,此时可能引用了一个第三方的包,过了不久之后,B同事接手了该项目,此时如果B同事通过go get 命令获取了包,而且包的版本进行了升级,恰巧这个包又不兼容以前的版本,这就会导致程序编译错误等问题。或者当这个维护的第三方包删除了,那么B同学则不能下载到该包。
由上面的例子就能知道,为什么需要进行包的依赖管理了。
go里面进行包依赖管理的工具有几个。godep就是其中之一。
二、安装godep
1.安装方法: go get github.com/tools/godep
2.验证是否安装成功:在shell里面键入 godep ,应该会出现帮助信息。
Usage:
godep command [arguments]
The commands are:
save list and copy dependencies into Godeps //save命令主要是用于保存当前的依赖
go run the go tool with saved dependencies //主要是用于执行Go程序,相当于在原来的go命令上套了一层,因为涉及到了包管理
get download and install packages with specified dependencies //get命令主要是用于获取当前指定的依赖包
path print GOPATH for dependency code
restore check out listed dependency versions in GOPATH //把依赖的包都下载到Gopath当中
update update selected packages or the go version //更新依赖的包
diff shows the diff between current and previously saved set of dependencies
version show version info
三、演示如何使用godep
如下项目使用了第三方的包,那么我们就可以使用godep进行包管理
1. 在项目根目录,执行godep save
命令,如果执行成功,则会生成两个文件夹 Godeps 和 vendor
godep save 会把当前包所依赖的所有第三方包扫描出来,然后将源代码放在vendor目录下。
GoDeps保存的是第三方包的依赖信息
Vendor保存所有依赖的第三方包
可以查看一下Godep.json
{
"ImportPath": "godepDemo/protobuf",
"GoVersion": "go1.10",
"GodepVersion": "v80",
"Deps": [
{
"ImportPath": "github.com/golang/protobuf/proto",
"Comment": "v1.3.2-1-g4c88cc3f",
"Rev": "4c88cc3f1a34ffade77b79abc53335d1e511f25b"
}
]
}
Deps这一个字段里面保存着当前依赖包的路径、git提交的版本号信息。下次在拉下代码之后,执行Go build 就会执行Vendor里面的代码,这样就再也不用担心代码不一致的问题。
备注:当引用的第三方包要升级了怎么办,那么就修改Godep.json里面的提交的版本号就行了。
Godep是怎么实现版本管理的,可以参考下面这个图。
总结如何使用godep
1.保证程序能够正常编译
2.执行godep save 命令,执行之后会将所有的依赖的第三方包扫描出来,生成Godeps和Vendor目录
3.提交上面两个文件夹到自己的代码库,提交之后我们代码中的第三方依赖就固定下来了。
4.如果需要更新依赖的版本,那么直接更新godep.json里面的第三方包的版本号,然后再执行一次godep save,最后提交到我们的代码库就行了。
例如:可以查看一下我依赖的protobuf的commitId
然后更新一下Godeps.json里面的版本号
来源:https://www.cnblogs.com/dcz2015/p/11428458.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
浅析MySQL内存的使用说明(全局缓存+线程缓存)
php下载远程大文件(获取远程文件大小)的实例
IE和Firefox下event事件杂谈
通过Python绘制中国结的示例代码
![](https://img.aspxhome.com/file/2023/4/102784_0s.png)
.NET中IoC框架Autofac用法讲解
分支任务:从哪里来,回哪里去
![](https://img.aspxhome.com/file/UploadPic/20099/4/3819638990_da91f304b0-56s.jpg)
MySQL带你秒懂索引下推
![](https://img.aspxhome.com/file/2023/2/108912_0s.jpg)
Golang两行代码实现发送钉钉机器人消息
![](https://img.aspxhome.com/file/2023/3/134023_0s.png)
SQL分组排序去重复的小实例
20分钟MySQL基础入门
![](https://img.aspxhome.com/file/2023/6/113976_0s.jpg)
Pycharm 2020最新永久激活码(附最新激活码和插件)
![](https://img.aspxhome.com/file/2023/2/59132_0s.jpg)
git设置忽略文件.gitignore的方法
Java语言实现对MySql数据库中数据的增删改查操作的代码
解决sql server保存对象字符串转换成uniqueidentifier失败的问题
kafka-python批量发送数据的实例
Python 文件操作方法总结
php过滤器使用详解
Python编程mac下使用pycharm小技巧
![](https://img.aspxhome.com/file/2023/9/75119_0s.jpg)
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
![](https://img.aspxhome.com/file/2023/5/94065_0s.jpg)
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
![](https://img.aspxhome.com/file/2023/7/87597_0s.jpg)