Go语言使用Godep进行包管理
一、为什么要包管理
默认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里面的版本号

Go语言使用Godep进行包管理的更多相关文章
- 在go modules里使用go get进行包管理
上一篇文章里我们介绍了go modules的初步使用,现在我们来更深入的了解一下如何使用go get在module中管理依赖. module下的包管理 首先我们介绍过go mod edit修改go.m ...
- 使用glide进行包管理
glide是golang的一款包管理工具,就像Java下的Maven(当然Maven的定位不只是包管理工具).今天试用了一下,记录一下使用过程和遇到的一些坑. 环境 Windows 7,Goland, ...
- nodejs docker 开发最好选择yarn 进行包管理而不是npm
npm 与yarn 的区别网上一大堆的文章,我们在构建docker 镜像是应该遵守的有些原则 基础镜像尽量小 对于构建进行缓存处理 构建的docker 的文件层数尽量少 能直接运行的,就别进行重复 ...
- C语言学习笔记:15_c语言中的进制操作.c
/* * 15_c语言中的进制操作.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include & ...
- Python语言中各种进制相互转换
目录 Python语言中各种进制相互转换 将二进制.八进制.十进制的数分别转换成十进制的方法 将十进制转换成二进制.八进制.十六进制 Python语言中各种进制相互转换 本文参考自https://ww ...
- c语言基础学习08_内存管理
=============================================================================涉及到的知识点有:一.内存管理.作用域.自动变 ...
- c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)
//c语言描述 将2进制转化为10进制 #include <stdio.h> #include <stdlib.h> #include <math.h> #defi ...
- C语言文件实现学生成绩管理
C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文 ...
- C语言:十进制进制转换为其他进制(思想:查表法)
// // main.c // Hex conversion // // Created by ma c on 15/7/22. // Copyright (c) 2015年 bjsxt. A ...
随机推荐
- C语言中结构体的构造函数
示例代码: #include <iostream> using namespace std; struct Node { int x, y, z; Node(int _x, int _y, ...
- Nginx负载均衡-如何自定义URL中的hash key
"例如请求的url为http://www.a.com/{path_var1}/{path_var2}path_var1和path_var2是两个path variable如果现在只想根据pa ...
- 【GStreamer开发】GStreamer播放教程07——自定义playbin2的sink
目标 通过手动选择音频和视频的sink,playbin2可以进一步定制.这允许使用playbin2的应用在解码后可以自行做最终的渲染和显示.本教程展示了: 如何替换playbin2选择的sink 如何 ...
- art-template 弹出编辑
<!-- 模板 --> <script id="render-tpl" type="text/html"> <div class= ...
- C之推栈溢出原因
https://blog.csdn.net/weixin_36194037/article/details/78871468
- PAT(B) 1048 数字加密(Java)字符串
题目链接:1048 数字加密 (20 point(s)) 题目描述 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运 ...
- golang 单元测试(一)
单元测试函数类型 Test(功能测试) 函数规则: 函数名: TestXxxx , 以Test为前缀.Xxxx以大写字母开头 参数类型: *testing.T func TestXxxx(t *tes ...
- java连接腾讯云上的redis
目录 腾讯云上的配置 redis连接单机和集群 依赖 pom.xml redis参数的配置文件 遗留问题 腾讯云上的配置 在安全组上打开相关的端口即可 "来源" 就是你的目标服务器 ...
- Jmeter之分布式测试/压测
Jmeter做分布式测试的原因: 测试机器的配置低,对服务器进行压测时,造成不了压力. jmeter并发10000后,测试机就已经卡顿了,而且测试结果有大量失败(忽略了jmeter自身问题=.=||| ...
- sqlserver 查看表死锁
1.SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tr ...