說一說go mod

[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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容