简介:

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

如果要增加新的依赖包:

  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

golang包管理工具及环境管理工具;如何下载外网的依赖包的更多相关文章

  1. [Visual Studio] 记一次排错:打不开 Nuget 包管理器里的安装package页面,无法 安装 / 恢复 包

    出差一阵子PC很久没用了, 回来在用Visual Studio (2017) 的时候, 工程里无法安装Package了  >_<    --- 也不知道电脑做了什么?--- Nuget包管 ...

  2. 从yum源下载安装包及依赖包

    局域网内所有linux都用yum从外网源安装软件有点浪费,尤其遇到下载慢的情况: 所以考虑下载后传到其他机器安装,还可以保证版本一致(创建一个本地仓库更好,这个后面研究了再记录): 首先安装yum工具 ...

  3. golang module 下载外网资源失败解决办法

    用 golang 1.11 module 特性时,需要下载golang.org等外网地址的库文件 可以创建环境变量GOPROXY,使用Aliyun的镜像 go公共代理文档 简介 go module公共 ...

  4. yum 下载安装包以及依赖包

    有时候我在用yum安装软件,依赖包比较多,还受网速的影响.所以我们可以将安装包以及依赖包下载到本地安装,这样会快捷很多. yum 提供了这种功能 yum -y install yum-utils 下载 ...

  5. go包管理工具glide

    一.命令 安装 $ go get github.com/Masterminds/glide $ go install github.com/Masterminds/glide 初始化项目并在当前项目下 ...

  6. Golang Vendor 包管理工具 glide 使用教程

    Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包.类似 Java 的 Maven,PHP 的 Composer. Github:https:// ...

  7. Node包管理工具

    Node包管理工具 只是简单的介绍一些工具的使用,有利于开发过程.除了介绍Node包管理工具,还介绍了前端打包工具,前端模块管理工具 Node包管理工具:    --npm    --cnpm    ...

  8. python版本管理工具pyenv和包管理工具pipenv

    一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...

  9. python包管理工具他们之间的关系

    python包管理工具之间的关系 现在的python包管理工具有很多,非常混乱,必须理清他们之间的关系才能更好的使用python构建强大的包关系系统工具. 首先:python官方推荐的第三方库是PyP ...

随机推荐

  1. 【LOJ】#2028. 「SHOI2016」随机序列

    题解 我们发现只有从第一个往后数,用乘号联通的块是有贡献的 为什么,因为后面所有表达式 肯定会有 + ,还会有个-,贡献全都被抵消了 所以我们处理出前缀乘积,然后乘上表达式的方案数 答案就是\(\su ...

  2. USACO 6.1 Cow XOR

    Cow XORAdrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All of ...

  3. bzoj 1820 dp

    最普通dp要4维,因为肯定有一个在上一个的位置,所以可以变为3维,然后滚动数组优化一下. #include<bits/stdc++.h> #define LL long long #def ...

  4. bzoj 1826

    思路:贪心取最后出现的. #include<bits/stdc++.h> #define LL long long #define fi first #define se second # ...

  5. jdk与eclipse不匹配的各种问题。。。

  6. Ionic Js六:切换开关操作

    以下实例中,通过切换不同开关 checked 显示不同的值,true 为打开,false 为关闭. HTML 代码 <ion-header-bar class="bar-positiv ...

  7. windows上springboot打war部署tomcat小记

    web项目,需要部署到云主机里去,现在windows里试一下. springboot项目,主要流程就只是打成war包后扔到tomcat里去,但是由于是springboot项目,有一些需要注意的地方,这 ...

  8. 第一个ASP.NET MVC应用程序

    首先打开vs2015 文件->新建->项目 选择模版选empty,下面[为下项添加文件夹和核心引用]勾选mvc 点击确定就好

  9. 20162327WJH使用队列:模拟票务站台代码分析

    20162327WJH使用队列:模拟票务站台代码分析 用链队实现队列的情况 1.用链表实现队列的代码 关键方法代码及补全代(LinkedOueue类) public void enqueue(T el ...

  10. java的多线程之四(线程的操作)

    本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17560467,转载请注明. 线程中断    线程中断涉及到三个方法,如下 ...