业务痛点

使用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程序中的依赖包相关推荐

  1. (转)CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  2. dagger2 注入_如何使用Dagger 2在您的应用程序中实现依赖注入

    dagger2 注入 Kriptofolio应用程序系列-第4部分 (Kriptofolio app series - Part 4) Dependency injection will signif ...

  3. 微信小程序中使用 npm 包

    在微信小程序中使用npm包,需要进行以下步骤: 确保你的小程序开发工具的版本号高于v1.02.1808300,因为这个版本之后的小程序开发工具已经支持使用npm包. 小程序根目录下执行npm init ...

  4. pycharm中导出依赖包 在pycharm下边的Terminal打开命令行终端执行命令

    pycharm中导出依赖包 1 在pycharm下边的Terminal打开命令行终端执行命令 D:\nlp\salary\aSalary>pip freeze > d:\nlp\salar ...

  5. dependency报红_解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)...

    问题描述: 真的,说来话长,这应该是我花最多时间去解决关于Maven依赖包导入的问题,以前粘贴复制导入,自动下载成功了, 这次怎么搞,怎么让他自动下载都还是红红的一片, 花了大半天,各种尝试,只为搏得 ...

  6. jcenter库中的依赖包无法下载

    jcenter库中的依赖包无法下载 react-native打包失败 解决办法 react-native打包失败 今天突然发现react-native项目打包失败,仔细查看发现是因为jcenter库中 ...

  7. IDEA中Maven依赖包无法下载,maven使用阿里源无法Could not transfer artifact xx.xx from/to alimaven(aliyun)-

    方式一: 大部分人会有这种问题,直接修改即可,请参考持.之.以.恒 IDEA中Maven依赖包无法下载或导入问题解决办法 二 maven使用阿里数据源不能生效,如这种 Could not transf ...

  8. [20190805]在小程序中使用npm包

    小程序是可以使用npm包的 1. 初始化npm:(在项目目录下输入) npm init 此时项目文件夹会创建一个配置信息的package.json文件 2. 手动新建node_modules文件夹:( ...

  9. 如何在.NET Core控制台程序中使用依赖注入

    背景介绍 依赖注入(Dependency Injection), 是面向对象编程中的一种设计原则,可以用来减低代码之间的耦合度.在.NET Core MVC中 我们可以在Startup.cs文件的Co ...

最新文章

  1. nyoj-619 青蛙过河
  2. 2016-01-18 10:33PM at Parkyard difference between WebUI and Fiori
  3. unity游戏教程 space shooter (游戏控制器)
  4. window8服务器
  5. 共享变量在线程间的可见性
  6. CSDN markdown 数学公式指导手册
  7. 如何修改计算机背景色,照片换背景颜色 电脑如何修改照片底色?如何修改照片背景色?...
  8. Oracle锁表解决方法
  9. php 连接局域网打印机,如何添加局域网打印机?局域网打印机添加方法介绍
  10. 盈利与公益矛盾迸发下,众筹平台如何才能自救?
  11. 狂神ajax,Ajax---狂神说
  12. 极坐标可以用计算机吗,极坐标(怎么用计算器计算极坐标)
  13. 基于RK3399配置并测试—单线激光雷达
  14. Wannafly挑战赛11 A B D【规律+逆元+字符串hash】
  15. HTML5云图,HTML5/Three.js 百万粒子构成的云图
  16. linux卸载bzip2,Linux命令(29):bzip2/bunzip2命令-压缩和解压
  17. 加推携手京东开普勒打造超级IP名片,让人人都能轻松创业开店!
  18. 修复u盘:文件或目录损坏且无法读取
  19. 为堕落作准备——大二篇
  20. 检测Socks5代理是否可用

热门文章

  1. Java Date类
  2. 2022-2028年中国版权行业深度调研及投资前景预测报告
  3. 2022-2028年中国胶片手套行业市场研究及前瞻分析报告
  4. SOAPUI请求及mockservice 使用
  5. 2014年10月18日
  6. UVa 10051 Tower of Cubes(类似LIS)
  7. 敏捷宣言遵循的十二条原则
  8. 导购网站 服务器,导购网站云服务器配置
  9. arcgis xml 下载 切片_vue/cli3整合Cesium,加载离线arcgis 切片
  10. android的布局流程,Android View 布局流程(Layout)全面解析