[toc]
說一說go mod
寫在前面,我們要切換到go mod嗎
go mod是官方力推的go模塊依賴管理的工具,有官方的背書,肯定是要用的。go1.13已經(jīng)默認(rèn)支持了,所以遲早要切到go mod, 勢不可擋。
go mod能做什么
go mod能管理的依賴包的版本,能保證在不同地方構(gòu)建,獲得的依賴模塊是一致的。
沒有g(shù)o mod之前如何管理包依賴
沒有g(shù)o mod之前,有g(shù)o deps, vendor等方法來解決。
go mod如何工作
- go 1.11通過設(shè)置環(huán)境變量GO111MODULE來決定是否啟用
export GO111MODULE=off #關(guān)閉go mod
export GO111MODULE=on # 開啟mod
export GO111MODULE=auto # GOPATH/src不啟用,但是還要看當(dāng)前目錄或者上級目錄是否存在go.mod,go.sum,如果存在,則啟用go mod
這里面有個坑,就是設(shè)置為auto的時候并且在GOPATH/src下,如果該目錄或者父目錄存在go.mod, go.sum文件,則go mod也是啟用的
- go1.13已經(jīng)默認(rèn)開啟
切換到go mod可能遇到的問題
- go mod download非常慢
export GOPROXY=https://mirrors.aliyun.com/goproxy/ #設(shè)置拉取的代理
export GOPROXY=file://本地路徑 # 也可以從本地加載
- go mod下載的包不對
可下面的命令下載指定的版本
如果發(fā)現(xiàn)編譯不過,可以通過下面命令列出指定mod的版本,然后go get拉指定版本號的包
go list -m -versions rsc.io/sampler
go get rsc.io/sampler@v1.3.1
1.13可以徹底不要GOPATH了
- go mod 會貫穿go tool工具鏈,這句話什么意思呢,意思是go test, go vet, go build等工具都會先檢查依賴。go mod會自動工作。如果你依賴沒有下載好,則會一直卡住。
* go mod init # 初始化當(dāng)前目錄為模塊根目錄,生成go.mod, go.sum文件
* go mod download # 下載依賴包
* go mod tidy #整理檢查依賴,如果缺失包會下載或者引用的不需要的包會刪除
* go mod vendor #復(fù)制依賴到vendor目錄下面
* go mod 可看完整所有的命令
go mod雖好,但是費(fèi)開發(fā)者的電腦磁盤,go mod拉下的包都會放 當(dāng)前目錄的pkg/mod目錄下面, 意味著不同項(xiàng)目引用相同的包會重復(fù)下載,不像java的maven本地一個集中的目錄,不重復(fù)下載。
更詳細(xì)的說明可以看官方blog關(guān)于go mod的說明
https://blog.golang.org/using-go-modules