golang包管理工具及环境管理工具;如何下载外网的依赖包

简介:

golang的包管理工具相似于java的maven、python的pip、js的npm,能够实现依赖包的统一管理;有不少:govendor、godep、glide,挑一个本身喜欢的用吧。mac安装的话均可以使用brew Install godep/govendor/glidehtml

go的环境管理相似于python的virtualenv;用来实现多个go版本并行运行的goenv:https://bitbucket.org/ymotongpoo/goenvjava

go的包管理工具对比:https://ieevee.com/tech/2017/07/10/go-import.htmlpython

 

GOROOT并非必需要设置的。

GOROOT不是必需要设置的。参见Installing to a custom location,默认go会安装在/usr/local/go下,但也容许自定义安装位置,GOROOT的目的就是告知go当前的安装位置,编译的时候从GOROOT去找SDK的system libariry。git

例如我用的是ubuntu 16.04,默认go的版本是1.6,若是我想升级为更新的版本,就须要自定义安装,因此我设置了GOROOT:export GOROOT=$HOME/go1.7.4github

GOPATH必需要设置,但并非固定不变的

GOPATH的目的是为了告知go,须要代码的时候,去哪里查找。注意这里的代码,包括本项目和引用外部项目的代码。GOPATH能够随着项目的不一样而从新设置。golang

GOPATH下会有3个目录:src, bin, pkg。docker

  • src目录:go编译时查找代码的地方
  • bin目录:go get godep这种bin工具的时候,二进制文件下载的目的地
  • pkg目录:编译生成的lib文件存储的地方。

 

godep

godep的使用者众多,如docker,kubernetes, coreos等go项目不少都是使用godep来管理其依赖,固然缘由多是早期也没的工具可选。shell

godep早期版本并不依赖vendor,因此对go的版本要求很松,go 1.5以前的版本也能够用,只是行为上有所不一样。在vendor推出之后,godep也改成使用vendor了。npm

godep使用很简单:当你的项目编写好了,使用GOPATH的依赖包测试ok了的时候,执行:json

$ 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" } ] }

若是要增长新的依赖包:

  1. Run go get foo/bar
  2. Edit your code to import foo/bar.
  3. Run godep save (or godep save ./…).

若是要更新依赖包:

  1. Run go get -u foo/bar
  2. 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

相关文章
相关标签/搜索