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不是必需要設置的。參見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.4
。github
GOPATH的目的是爲了告知go,須要代碼的時候,去哪裏查找。注意這裏的代碼,包括本項目和引用外部項目的代碼。GOPATH能夠隨着項目的不一樣而從新設置。golang
GOPATH下會有3個目錄:src, bin, pkg。docker
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件事:
一個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" } ] }
若是要增長新的依賴包:
若是要更新依賴包:
godep還支持godep restore
,能夠將vendor下的代碼反向拷貝到$GOPATH下。不過我沒想到這個功能在什麼狀況下能夠用到。
正規和可信任的方式是從github上下載。golang 在 github 上創建了一個鏡像庫,如 https://github.com/golang/net 便是 https://golang.org/x/net 的鏡像庫。所以獲取 golang.org/x/net 包(其餘包相似),其實只須要如下步驟:
有說能夠從Golang 中國下載,https://golangtc.com/packages它提供了這個服務,其實裏面不過是github的連接地址
聽說:https://gopm.io/download 也是一種辦法
使用go get命令除了會下載指定的項目代碼,還會去下載這個項目所依賴的全部項目,而且下載完會自動安裝:go help get查看幫助信息
go的全部依賴包(內部和外邊)都放入gopath裏面
Viper是一個方便Go語言應用程序處理配置信息的庫。它能夠處理多種格式的配置。它支持的特性:
在構建現代應用程序時,您沒必要擔憂配置文件格式; 你能夠專一於構建出色的軟件。
Viper 能夠作以下工做:
Viper讀取配置信息的優先級順序,從高到低,以下:
Viper 的配置項的key不區分大小寫。
來源:https://ieevee.com/tech/2017/07/10/go-import.html
http://blog.51cto.com/13599072/2072753
https://github.com/spf13/viper