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

如果要增加新的依賴包:

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM