golang开发go包依赖管理godep使用教程
作者:秋天的春 发布时间:2023-10-16 04:09:31
介绍
godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理
godep 建议在 golang 1.6 以后使用
godep 依赖 vendor 具体查看
https://stackoverflow.com/questions/37237036/how-should-i-use-vendor-in-go-1-6请做好 vendor 管理
安装
https://github.com/tools/godep
go get -u -v github.com/tools/godep
成功安装后,在$GOPATH
的bin
目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这个,建议这个目录加入到全局环境变量中
包管理使用 godep
以下命令都是在工程的根目录运行
拉取依赖 restore 用于开发
godep restore
建议开发过程使用这个命令来同步依赖库
如果下载的项目中只有Godeps.json文件,而没有包含第三库则可以使用godep restore这个命令将所有的依赖库下来到$GOPATH\src
中 用于开发
godep restore执行时,godep会按照Godeps/Godeps.json
内列表,依次执行go get -d -v
来下载对应依赖包到GOPATH路径下
如果某个原先的依赖包保存路径(GOPATH下的相对路径)与下载url路径不一致,比如kuberbetes在github上路径是github.com/kubernetes,而代码内import则是my.io,则会导致无法下载成功,也就是说godep restore不成功。这种只能手动,比如手动创建$GOPATH/my.io目录,然后git clone
检出依赖 save
godep save
自动扫描当前目录所属包中import的所有外部依赖库(非系统库)
将所有的依赖库下来下来到当前工程中,产生文件
Godeps\Godeps.json
文件在没有
Godeps`
文件的情况下,生成模组依赖目录vendor`文件夹
如果是开发依赖使用三方库,需要固定使用某个版本,请完全提交Godeps`和
vendor`文件夹
低版本的 godep 生成的是Godeps/_workspace
,建议升级
godep save能否成功执行需要有两个要素:
当前或者需扫描的包均能够编译成功:因此所有依赖包事先都应该已经或go get或手工操作保存当前GOPATH路径下
依赖包必须使用了某个代码管理工具(如git,hg):这是因为godep需要记录revision
这个命令用于编译构建的,三方构建工具需要额外配置构建参数
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变量中
Godeps目录的作用
godep save时godep把所有依赖包代码从GOPATH路径拷贝到Godeps目录下,并去除代码管理目录。这个用处主要是为了支撑godep go tool的一系列操作,尤其是git clone了代码库下来后,通常直接用godep go install xxx即可完成编译,一定程度上能够缓解golang比较严格的代码路径和包管理带来的烦恼。
而在使用IDE时,可以通过把vendor
添加到GOPATH实现代码跳转和编译等功能,比较方便
godep其他命令
save list and copy dependencies into Godeps
go run the go tool with saved dependencies
get download and install packages with specified dependencies
path print GOPATH for dependency code
restore check out listed dependency versions in 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
来源:https://blog.csdn.net/ffzhihua/article/details/80914584


猜你喜欢
- 在整个产品设计的过程中,视觉设计与交互设计的“工序”非常紧密,两者关系也是相辅相成,互相影响。而视觉界面作为最直接与用户交流的层面,如何把交
- 一.filter函数简介filter函数主要用来筛选数据,过滤掉不符合条件的元素,并返回一个迭代器对象,如果要转换为列表list或者元祖tu
- 本文实例讲述了PHP实现获取第一个中文首字母并进行排序的方法。分享给大家供大家参考,具体如下:最近在做储值结算,需求里结算首页需要按门店的首
- 背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?测试环境MyS
- 1、什么是全局变量?在Python中,全局变量指的是可以作用于函数内部和外部的变量。在这里有两种情况:在函数的外部定义和内部定义添加glob
- 基于的phantomjs的自动化,会出现1.flash不支持2.部分基于view的按钮点不到,部分按钮是基于flash的(尤其是在于上传按钮
- 本文实例讲述了Python3实现的判断回文链表算法。分享给大家供大家参考,具体如下:问题:请判断一个链表是否为回文链表。方案一:指针法cla
- 1.Django实现WebSocket在线聊天室1.1 安装pip install channels==2.3(saas) F:\Deskt
- 以这个为例: yyyy-MM-dd HH:mm:ss首先得写好你需要的模板options.sign =
- 前言最近我在公司优化过几个慢查询接口的性能,总结了一些心得体会拿出来跟大家一起分享一下,希望对你会有所帮助。我们使用的数据库是Mysql8,
- Python是一门高级编程语言,其拥有多种循环方式,如for循环、while循环、do-while循环等。在编写程序时,需要根据不同的场景和
- 根据我们指定的条件检索函数中的元素import matplotlib.pyplot as pltimport numpy as npa =
- 今天用Python提取了Linux内核源代码的目录树结构,没有怎么写过脚本程序,我居然折腾了2个小时,先是如何枚举出给定目录下的所有文件和文
- Python2.x使用过程中,中文乱码解决最耳熟能详的方法就是在代码前加上#-*- coding:utf-8 –*-那么为什么需要这么做呢?
- 首先定义了一个test.py的文件,然后再定义一个函数,并在函数定义后直接运行:test.pydef HaveFun(): if __nam
- CKEditor官方演示是有上传图片和浏览服务器文件功能的,但是我们自己下载回来的却没有这两个功能…… 其实还需要下载另外一个组件:CKFi
- 本文实例为大家分享了python实现多人聊天室的具体代码,供大家参考,具体内容如下一、目的以实现小项目的方式,来巩固之前学过的Python基
- 缘由最近在做公司的一个点餐H5项目需要前端动态计算用户选的商品的总价(单价*数量)和购物车的总价格时发现关于 JavaScript 浮点数计
- 正在看的ORACLE教程是:Oracle与SQL Server在企业应用的比较。在我供职的公司不仅仅拥有Oracle数据库,同时还拥有SQL
- 使用Python3和Opencv识别一张标准的答题卡。大致的过程如下:1.读取图片2.利用霍夫圆检测,检测出四个角的黑圆位置,从确定四个角的