使用govendor灵活管理Go程序中的依赖包
业务痛点
使用Go开发程序的过程中,为了方便开发,往往会引用很多标准库或者第三方的依赖包,第三方依赖包往往比标准库功能更全面更强大更接地气,那么如何管理众多的第三方依赖包呢?如何更新其版本?在不需要时,如何删除掉呢?如果有工具能帮助解决这个问题就好了,好在Go中前辈们其实早就想到了这个痛点,有个第三方的库govendor就能完美解决这些问题,让我们更舒心地使用依赖库,只需要很少的几行命令就能搞定这些。
安装
只需要下面的一行命令,就能将govendor安装到$GOPATH的bin目录下面
go get -u -v github.com/kardianos/govendor
如果命令行找不到该命令,需要将$GOPATH/bin加入PATH变量中去。在Linux上,可以编辑~/.bashrc文件,在Mac上煤科院编辑~/.bash_profile文件,以我目前Mac开发机为例,我的$GOPATH为/Users/tao/go,我只需在前面的文件中加入
vim ~/.bash_profile
添加下面的一行
export PATH=/Users/tao/go/bin:$PATH
使用下面的命令使之生效
source ~/.bash_profile
查看是否生效
echo $PATH
然后在命令行执行govendor -h就能看到govendor命令可以灵活使用了。
govendor的最大的好处
Go从1.5版本之后,就默认优先使用vendor子目录中的依赖库,而不是$GOPATH/src中的依赖包,这样我们可以把工程源码到处复制,使用时直接go build就可以了,不需要考虑一大堆第三方依赖包的管理问题。
使用govendor管理第三方依赖包
现在进入你的Go工程目录下面,依次执行下面的命令,假设我现在的项目工程名为clairvoyance:
初始化vendor目录
govendor init
此时会在当前工程目录(顶层)下面生成一个子目录vendor,里面有个文件vendor.json记录了一些模板信息。
govendor add +external
它会将你之前单独安装到$GOPATH/src目录下的所有依赖包都复制到本项目的vendor下面,并且在vendor.json列出详细的清单。如果$GOPATH/src目录下面没有依赖包,会解析当前项目中的go文件来将所有的依赖库先go get下来,存放到vendor下面。
查看你的工程中的第三方包列表
govendor list
简要列出各依赖包列表,实操发现,这个命令比下面的govendor list -v fmt命令显示的包更全面一些。
格式化查看
govendor list -v fmt
可以更详细地查看各种包的依赖关系,但是有些包未显示出来。
添加或更新包到本地vendor目录
govendor fetch
实操验证
后来再新增一个第三方依赖包
govendor fetch github.com/ClickHouse/clickhouse-go
发现vendor子目录下面的vendor.json中的确新增了clickhouse的相关信息,这说明新增依赖包管理已经成功了。
实例操作二
原来使用的第三方接口是v2版本,现在更新为v3版本,相应的接口库都有全新改变,如何操作呢?
在当前项目顶层目录下面,执行下面的命令
govendor update github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606
将从$GOPATH/src/github.com下面复制指定的新接口库,复制到当前项目的vendor目录中,并看到vendor.json的内容已经修改了。原来的旧版本接口库还保留在vendor目录中,你可以指定删除掉它,我这里暂且先保留。还有下面的库
govendor update -tree 'github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common'
-tree选项表示将下面的文件和子目录一并都复制进来,这个选项务必要选。
使用govendor灵活管理Go程序中的依赖包相关推荐
- (转)CocoaPods:管理Objective-c 程序中各种第三方开源库关联
在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...
- dagger2 注入_如何使用Dagger 2在您的应用程序中实现依赖注入
dagger2 注入 Kriptofolio应用程序系列-第4部分 (Kriptofolio app series - Part 4) Dependency injection will signif ...
- 微信小程序中使用 npm 包
在微信小程序中使用npm包,需要进行以下步骤: 确保你的小程序开发工具的版本号高于v1.02.1808300,因为这个版本之后的小程序开发工具已经支持使用npm包. 小程序根目录下执行npm init ...
- pycharm中导出依赖包 在pycharm下边的Terminal打开命令行终端执行命令
pycharm中导出依赖包 1 在pycharm下边的Terminal打开命令行终端执行命令 D:\nlp\salary\aSalary>pip freeze > d:\nlp\salar ...
- dependency报红_解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)...
问题描述: 真的,说来话长,这应该是我花最多时间去解决关于Maven依赖包导入的问题,以前粘贴复制导入,自动下载成功了, 这次怎么搞,怎么让他自动下载都还是红红的一片, 花了大半天,各种尝试,只为搏得 ...
- jcenter库中的依赖包无法下载
jcenter库中的依赖包无法下载 react-native打包失败 解决办法 react-native打包失败 今天突然发现react-native项目打包失败,仔细查看发现是因为jcenter库中 ...
- IDEA中Maven依赖包无法下载,maven使用阿里源无法Could not transfer artifact xx.xx from/to alimaven(aliyun)-
方式一: 大部分人会有这种问题,直接修改即可,请参考持.之.以.恒 IDEA中Maven依赖包无法下载或导入问题解决办法 二 maven使用阿里数据源不能生效,如这种 Could not transf ...
- [20190805]在小程序中使用npm包
小程序是可以使用npm包的 1. 初始化npm:(在项目目录下输入) npm init 此时项目文件夹会创建一个配置信息的package.json文件 2. 手动新建node_modules文件夹:( ...
- 如何在.NET Core控制台程序中使用依赖注入
背景介绍 依赖注入(Dependency Injection), 是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度.在.NET Core MVC中 我们可以在Startup.cs文件的Co ...
最新文章
- nyoj-619 青蛙过河
- 2016-01-18 10:33PM at Parkyard difference between WebUI and Fiori
- unity游戏教程 space shooter (游戏控制器)
- window8服务器
- 共享变量在线程间的可见性
- CSDN markdown 数学公式指导手册
- 如何修改计算机背景色,照片换背景颜色 电脑如何修改照片底色?如何修改照片背景色?...
- Oracle锁表解决方法
- php 连接局域网打印机,如何添加局域网打印机?局域网打印机添加方法介绍
- 盈利与公益矛盾迸发下,众筹平台如何才能自救?
- 狂神ajax,Ajax---狂神说
- 极坐标可以用计算机吗,极坐标(怎么用计算器计算极坐标)
- 基于RK3399配置并测试—单线激光雷达
- Wannafly挑战赛11 A B D【规律+逆元+字符串hash】
- HTML5云图,HTML5/Three.js 百万粒子构成的云图
- linux卸载bzip2,Linux命令(29):bzip2/bunzip2命令-压缩和解压
- 加推携手京东开普勒打造超级IP名片,让人人都能轻松创业开店!
- 修复u盘:文件或目录损坏且无法读取
- 为堕落作准备——大二篇
- 检测Socks5代理是否可用