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

相關文章
相關標籤/搜索