golang包管理工具及环境管理工具;如何下载外网的依赖包
简介:
golang的包管理工具类似于java的maven、python的pip、js的npm,可以实现依赖包的统一管理;有很多:govendor、godep、glide,挑一个自己喜欢的用吧。mac安装的话都可以使用brew Install godep/govendor/glide
go的环境管理类似于python的virtualenv;用来实现多个go版本并行运行的goenv:https://bitbucket.org/ymotongpoo/goenv
go的包管理工具对比:https://ieevee.com/tech/2017/07/10/go-import.html
GOROOT并不是必须要设置的。
GOROOT不是必须要设置的。参见Installing to a custom location,默认go会安装在/usr/local/go下,但也允许自定义安装位置,GOROOT的目的就是告知go当前的安装位置,编译的时候从GOROOT去找SDK的system libariry。
例如我用的是ubuntu 16.04,默认go的版本是1.6,如果我想升级为更新的版本,就需要自定义安装,所以我设置了GOROOT:export GOROOT=$HOME/go1.7.4。
GOPATH必须要设置,但并不是固定不变的
GOPATH的目的是为了告知go,需要代码的时候,去哪里查找。注意这里的代码,包括本项目和引用外部项目的代码。GOPATH可以随着项目的不同而重新设置。
GOPATH下会有3个目录:src, bin, pkg。
- src目录:go编译时查找代码的地方
- bin目录:go get godep这种bin工具的时候,二进制文件下载的目的地
- pkg目录:编译生成的lib文件存储的地方。
godep
godep的使用者众多,如docker,kubernetes, coreos等go项目很多都是使用godep来管理其依赖,当然原因可能是早期也没的工具可选。
godep早期版本并不依赖vendor,所以对go的版本要求很松,go 1.5之前的版本也可以用,只是行为上有所不同。在vendor推出以后,godep也改为使用vendor了。
godep使用很简单:当你的项目编写好了,使用GOPATH的依赖包测试ok了的时候,执行:
$ godep save
以hcache为例,执行go save,会做2件事:
- 扫描本项目的代码,将hcache项目依赖的包及该包的版本号(即git commit)记录到Godeps/Godeps.json文件中
- 将依赖的代码从GOPATH/src中copy到vendor目录(忽略原始代码的.git目录)。对于不支持vendor的早期版本,则会拷贝到Godeps/_workspace/里
一个Godeps.json的例子。
{
"ImportPath": "github.com/silenceshell/hcache",
"GoVersion": "go1.7",
"GodepVersion": "v79",
"Deps": [
{
"ImportPath": "github.com/tobert/pcstat",
"Rev": "91a7346e5b462a61e876c0574cb1ba331a6a5ac5"
},
{
"ImportPath": "golang.org/x/sys/unix",
"Rev": "0b25a408a50076fbbcae6b7ac0ea5fbb0b085e79"
}
]
}
如果要增加新的依赖包:
- Run go get foo/bar
- Edit your code to import foo/bar.
- Run godep save (or godep save ./…).
如果要更新依赖包:
- Run go get -u foo/bar
- Run godep update foo/bar. (You can use the … wildcard, for example godep update foo/…).
godep还支持godep restore,可以将vendor下的代码反向拷贝到$GOPATH下。不过我没想到这个功能在什么情况下可以用到。
如何下载外网的依赖包?
正规和可信任的方式是从github上下载。golang 在 github 上建立了一个镜像库,如 https://github.com/golang/net 即是 https://golang.org/x/net 的镜像库。因此获取 golang.org/x/net 包(其他包类似),其实只需要以下步骤:
- mkdir -p $GOPATH/src/golang.org/x
- cd $GOPATH/src/golang.org/x;git clone https://github.com/golang/net.git
有说可以从Golang 中国下载,https://golangtc.com/packages它提供了这个服务,其实里面不过是github的链接地址
据说:https://gopm.io/download 也是一种办法
使用go get命令除了会下载指定的项目代码,还会去下载这个项目所依赖的所有项目,并且下载完会自动安装:go help get查看帮助信息
go的所有依赖包(内部和外边)都放入gopath里面
有些包即使走代理,下载也非常慢,但是github的zip压缩包下载速度比较快,可以试试zip包解压的方式,直接解压到目的目录
Golang的配置信息处理框架Viper
什么是Viper
Viper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:
- 设置默认值
- 从JSON、TOML、YAML、HCL和Java properties文件中读取配置数据
- 可以监视配置文件的变动、重新读取配置文件
- 从环境变量中读取配置数据
- 从远端配置系统中读取数据,并监视它们(比如etcd、Consul)
- 从命令参数中读物配置
- 从buffer中读取
- 调用函数设置配置信息
为什么要使用Viper
在构建现代应用程序时,您不必担心配置文件格式; 你可以专注于构建出色的软件。
Viper 可以做如下工作:
- 加载并解析JSON、TOML、YAML、HCL 或 Java properties 格式的配置文件
- 可以为各种配置项设置默认值
- 可以在命令行中指定配置项来覆盖配置值
- 提供了别名系统,可以不破坏现有代码来实现参数重命名
- 可以很容易地分辨出用户提供的命令行参数或配置文件与默认相同的区别
Viper读取配置信息的优先级顺序,从高到低,如下:
- 显式调用Set函数
- 命令行参数
- 环境变量
- 配置文件
- key/value 存储系统
- 默认值
Viper 的配置项的key不区分大小写。
来源:https://ieevee.com/tech/2017/07/10/go-import.html
http://blog.51cto.com/13599072/2072753
https://github.com/spf13/viper
golang包管理工具及环境管理工具;如何下载外网的依赖包的更多相关文章
- [Visual Studio] 记一次排错:打不开 Nuget 包管理器里的安装package页面,无法 安装 / 恢复 包
出差一阵子PC很久没用了, 回来在用Visual Studio (2017) 的时候, 工程里无法安装Package了 >_< --- 也不知道电脑做了什么?--- Nuget包管 ...
- 从yum源下载安装包及依赖包
局域网内所有linux都用yum从外网源安装软件有点浪费,尤其遇到下载慢的情况: 所以考虑下载后传到其他机器安装,还可以保证版本一致(创建一个本地仓库更好,这个后面研究了再记录): 首先安装yum工具 ...
- golang module 下载外网资源失败解决办法
用 golang 1.11 module 特性时,需要下载golang.org等外网地址的库文件 可以创建环境变量GOPROXY,使用Aliyun的镜像 go公共代理文档 简介 go module公共 ...
- yum 下载安装包以及依赖包
有时候我在用yum安装软件,依赖包比较多,还受网速的影响.所以我们可以将安装包以及依赖包下载到本地安装,这样会快捷很多. yum 提供了这种功能 yum -y install yum-utils 下载 ...
- go包管理工具glide
一.命令 安装 $ go get github.com/Masterminds/glide $ go install github.com/Masterminds/glide 初始化项目并在当前项目下 ...
- Golang Vendor 包管理工具 glide 使用教程
Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包.类似 Java 的 Maven,PHP 的 Composer. Github:https:// ...
- Node包管理工具
Node包管理工具 只是简单的介绍一些工具的使用,有利于开发过程.除了介绍Node包管理工具,还介绍了前端打包工具,前端模块管理工具 Node包管理工具: --npm --cnpm ...
- python版本管理工具pyenv和包管理工具pipenv
一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...
- python包管理工具他们之间的关系
python包管理工具之间的关系 现在的python包管理工具有很多,非常混乱,必须理清他们之间的关系才能更好的使用python构建强大的包关系系统工具. 首先:python官方推荐的第三方库是PyP ...
随机推荐
- bzoj 1925 dp
思路:dp[ i ][ 0 ]表示第一个是山谷的方案,dp[ i ][ 1 ]表示第一个是山峰的方案, 我们算dp[ x ][ state ]的时候枚举 x 的位置 x 肯定是山峰, 然后就用组合数算 ...
- jenkins升级
1丶查看war包所在的目录 #rpm -ql jenkins /etc/init.d/jenkins //jenkins的启动文件 /etc/logrotate.d/jenkins //日志切割 /e ...
- Ionic 自动创建应用的图标与启动画面
你只需要一个目录和两张图片就可以搞定.图片可以是 .png 的,Photoshop的 .psd,或者Illustrator的 .ai,(例如)命名为icon.png和splash.png.把这些图片放 ...
- Ionic Js七:手势事件
1.on-hold 长按的时间是500毫秒. HTML 代码 <button on-hold="onHold()" class="button">长 ...
- [js]面向对象编程
一.js面向对象基本概念 对象:内部封装.对外预留接口,一种通用的思想,面向对象分析: 1.特点 (1)抽象 (2)封装 (3)继承:多态继承.多重继承 2.对象组成 (1)属性: 任何对象都可以添加 ...
- 深度学习基础系列(四)| 理解softmax函数
深度学习最终目的表现为解决分类或回归问题.在现实应用中,输出层我们大多采用softmax或sigmoid函数来输出分类概率值,其中二元分类可以应用sigmoid函数. 而在多元分类的问题中,我们默认采 ...
- python获取当前系统的桌面的路径
一,用内置的winreg(推荐) import winregdef get_desktop(): key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,\ ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
登录服务器,使用root用户连接mysql时出现错误提示: $ bin/mysql -uroot -p Enter password: ERROR (HY000): Can't connect to ...
- BZOJ.5329.[SDOI2018]战略游戏(圆方树 虚树)
题目链接 显然先建圆方树,方点权值为0圆点权值为1,两点间的答案就是路径权值和减去起点终点. 对于询问,显然可以建虚树.但是只需要计算两关键点间路径权值,所以不需要建出虚树.统计DFS序相邻的两关键点 ...
- 【SPFA】POJ1860-Currency Exchange
[题目大意] 给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换,能否赚. [思路] 反向运用SPFA,判断是否有正环.每次队首元素出队之后,判断一下到源点s的距离是否增大,增大则返回tr ...