天天看點

說一說go mod

寫在前面,我們要切換到go mod嗎

go mod是官方力推的go子產品依賴管理的工具,有官方的背書,肯定是要用的。go1.13已經預設支援了,是以遲早要切到go mod, 勢不可擋。

go mod什麼

go mod能管理的依賴包的版本,能保證在不同地方建構,獲得的依賴子產品是一緻的。

沒有go mod之前如何管理包依賴

沒有go mod之前,有go deps, vendor等方法來解決。

go mod如何工作

  • go 1.11通過設定環境變量GO111MODULE來決定是否啟用
export GO111MODULE=off  #關閉go mod
export GO111MODULE=on   # 開啟mod
export GO111MODULE=auto # GOPATH/src不啟用,但是還要看目前目錄或者上級目錄是否存在go.mod,go.sum,如果存在,則啟用go mod
           

這裡面有個坑,就是設定為auto的時候并且在GOPATH/src下,如果該目錄或者父目錄存在go.mod, go.sum檔案,則go mod也是啟用的

  • go1.13已經預設開啟

切換到go mod可能遇到的問題

  • go mod download非常慢
export GOPROXY=https://mirrors.aliyun.com/goproxy/ #設定拉取的代理 
export GOPROXY=file://本地路徑  # 也可以從本地加載
           
  • go mod下載下傳的包不對

可下面的指令下載下傳指定的版本

如果發現編譯不過,可以通過下面指令列出指定mod的版本,然後go get拉指定版本号的包
go list -m -versions rsc.io/sampler
go get rsc.io/[email protected]
           

1.13可以徹底不要GOPATH了

  • go mod 會貫穿go tool工具鍊,這句話什麼意思呢,意思是go test, go vet, go build等工具都會先檢查依賴。go mod會自動工作。如果你依賴沒有下載下傳好,則會一直卡住。
* go mod init # 初始化目前目錄為子產品根目錄,生成go.mod, go.sum檔案
* go mod download # 下載下傳依賴包
* go  mod tidy #整理檢查依賴,如果缺失包會下載下傳或者引用的不需要的包會删除
* go mod vendor #複制依賴到vendor目錄下面
* go mod 可看完整所有的指令

           

go mod雖好,但是費開發者的電腦磁盤,go mod拉下的包都會放 目前目錄的pkg/mod目錄下面, 意味着不同項目引用相同的包會重複下載下傳,不像java的maven本地一個集中的目錄,不重複下載下傳。

更詳細的說明可以看官方blog關于go mod的說明

https://blog.golang.org/using-go-modules

本文轉載自:https://studygolang.com/articles/24119?fr=sidebar