golang 依賴管理之 mod

2021-10-01 02:32:54 字數 3489 閱讀 8137

go 很早就考慮了依賴管理的問題,內建go get命令,可以直接獲取對應的依賴,非常方便,但是有乙個巨大的缺陷,沒有版本的維護和管理,而版本不一致可能會導致各種相容性問題,因此出現了很多第三方依賴管理工具,depglide就是其中的佼佼者,到了 go 1.11 官方終於推出了自己的依賴管理工具mod,並內建在 go 版本中,go mod使用簡單,功能強大,並且能自動相容大多數之前的第三方工具,大量優秀的開源庫都已經切換到了go mod,大有一統江湖之勢

乙個最大的變化是 golang 的專案終於不再依賴$gopath目錄了,之前的專案由於import機制問題,所有專案都位於$gopath/src目錄下,雖然也沒有太大的問題,但總是讓人感覺很怪,go 1.11 終於調整了這個問題,將**從$gopath中遷出了,為了相容之前研發模式,也仍然支援放到$gopath下,通過go111module環境變數控制

go mod init     # 在新的 go 專案中執行,自動分析依賴,建立 go.sum

go mod tidy # 自動分析依賴,並自動新增和刪除依賴

go mod vendor # 建立 vendor 目錄,將依賴拷貝到當前的 vendor 資料夾下

對於乙個新的 go 專案,只需要新建專案的時候執行一下go mod init手動修改go.mod檔案中的 require 字段,重新執行go mod tidy即可

)golang 的版本使用以v開頭的三位版本號,其中第一位表示有重大本本的更新,當發布乙個v2+版本的庫時,module my-module應該改為module my-module/v2,否則引入該庫需要在增加+incompatible字尾

)因為一些原因,國內的網路訪問不到 golang.org 上的庫,好在大部分庫在 github 上都有映象,可以用replace命令設定映象,下面是我碰到的一些庫

export goproxy=go mod 更新依賴後會在本地快取,快取路徑$gopath/pkg/mod

啟用 mod 配置

【goland】→【preference】→【go module (vgo)】→ 【enable go modules (vgo)】→ 【ok】

啟用 mod 之後,goland 會自動檢查依賴,並自動更新 go.sum,從而引入依賴庫,一般情況下都是好使的,偶爾不好使,手動執行下go mod tidy即可

vscode 好像不會自動更新,手動執行go mod tidy之後重啟才能生效

Go mod 之 Golang依賴包管理

如果你還在使用 gopath 模式來開發golang程式,那麼你可以參考本文來告別 gopath,並帶給你乙個方便的包管理工具。使用go mod 管理專案,就不需要非得把專案放到gopath指定目錄 直接使用命令 go mod init 目錄名稱 看到提示 go creating new go.mo...

golang 包依賴管理 govendor

golang 官方並沒有推薦最佳的包管理方案。到了1.5版本時代,官方引入包管理的設計,加了 vendor 目錄來支援本地包管理依賴。官方 wiki 推薦了多種支援這種特性的包管理工具,如 godep gv gvt glide govendor等。下面簡要介紹乙個我在專案中用到的 govendor。...

Golang 依賴管理工具

使用 vendor 目錄 go module proxy go vendor depgo mod 使用 再探go modules 使用與細節 go的包管理工具 三 go modules go的包管理工具 四 go module proxy go 模組解惑 到處都是 go111module 這到底什麼...