您好,登錄后才能下訂單哦!
這篇文章主要介紹了golang依賴管理之mod的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
golang 依賴管理之 mod
go 很早就考慮了依賴管理的問題,內置 go get
命令,可以直接獲取對應的依賴,非常方便,但是有一個巨大的缺陷,沒有版本的維護和管理,而版本不一致可能會導致各種兼容性問題,因此出現了很多第三方依賴管理工具,dep
和 glide
就是其中的佼佼者,到了 go 1.11 官方終于推出了自己的依賴管理工具 mod
,并內置在 go 版本中,go mod
使用簡單,功能強大,并且能自動兼容大多數之前的第三方工具,大量優秀的開源庫都已經切換到了 go mod
,大有一統江湖之勢
一個最大的變化是 golang 的項目終于不再依賴 $GOPATH
目錄了,之前的項目由于 import
機制問題,所有項目都位于 $GOPATH/src
目錄下,雖然也沒有太大的問題,但總是讓人感覺很怪,go 1.11 終于調整了這個問題,將代碼從 $GOPATH
中遷出了,為了兼容之前研發模式,也仍然支持放到 $GOPATH
下,通過 GO111MODULE
環境變量控制
GO111MODULE=off
: 關閉 mod,查找 vendor
目錄和 $GOPATH
路徑下的依賴
GO111MODULE=on
: 開啟 mod, 僅根據 go.mod
下載和查找依賴
GO111MODULE=auto
: 默認值,在非 $GOPATH
路徑并且包含 go.mod
的項目中才開啟 mod
go mod init # 在新的 go 項目中執行,自動分析依賴,創建 go.sum go mod tidy # 自動分析依賴,并自動添加和刪除依賴 go mod vendor # 創建 vendor 目錄,將依賴拷貝到當前的 vendor 文件夾下 go mod download # 手動下載依賴
對于一個新的 go 項目,只需要新建項目的時候執行一下 go mod init
之后每次庫更新,只需要先在代碼中 import 對應庫,然后執行 go mod tidy
即可(也可用 go mod download
手動下載)
手動修改 go.mod
文件中的 require 字段,重新執行 go mod tidy
即可
require ( github.com/gin-gonic/gin v1.4.0 )
golang 的版本使用以 v
開頭的三位版本號,其中第一位表示有重大本本的更新,當發布一個 v2+
版本的庫時,module my-module
應該改為 module my-module/v2
,否則引入該庫需要在增加 +incompatible
后綴
require ( github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible )
因為一些原因,國內的網絡訪問不到 golang.org 上的庫,好在大部分庫在 github 上都有鏡像,可以用 replace
命令設置鏡像,下面是我碰到的一些庫
replace ( cloud.google.com/go => github.com/googleapis/google-cloud-go v0.0.0-20190603211518-c8433c9aaceb go.etcd.io/bbolt => github.com/etcd-io/bbolt v1.3.4-0.20191001164932-6e135e5d7e3d go.uber.org/atomic => github.com/uber-go/atomic v1.4.1-0.20190731194737-ef0d20d85b01 go.uber.org/multierr => github.com/uber-go/multierr v1.2.0 go.uber.org/zap => github.com/uber-go/zap v1.10.1-0.20190926184545-d8445f34b4ae golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190605123033-f99c8df09eb5 golang.org/x/exp => github.com/golang/exp v0.0.0-20190510132918-efd6b22b2522 golang.org/x/image => github.com/golang/image v0.0.0-20190523035834-f03afa92d3ff golang.org/x/lint => github.com/golang/lint v0.0.0-20190409202823-959b441ac422 golang.org/x/mobile => github.com/golang/mobile v0.0.0-20190607214518-6fa95d984e88 golang.org/x/net => github.com/golang/net v0.0.0-20190606173856-1492cefac77f golang.org/x/oauth3 => github.com/golang/oauth3 v0.0.0-20190604053449-0f29369cfe45 golang.org/x/sync => github.com/golang/sync v0.0.0-20190423024810-112230192c58 golang.org/x/sys => github.com/golang/sys v0.0.0-20190602015325-4c4f7f33c9ed golang.org/x/text => github.com/golang/text v0.3.2 golang.org/x/time => github.com/golang/time v0.0.0-20190308202827-9d24e82272b4 golang.org/x/tools => github.com/golang/tools v0.0.0-20190608022120-eacb66d2a7c3 google.golang.org/api => github.com/googleapis/google-api-go-client v0.6.0 google.golang.org/appengine => github.com/golang/appengine v1.6.1 google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20190605220351-eb0b1bdb6ae6 google.golang.org/grpc => github.com/grpc/grpc-go v1.21.1 )
GO 1.12 之后支持了一個新的環境變量 GOPROXY,用來設置依賴的代理地址,有兩個共用的地址:社區的 goproxy.io
和又拍云的 goproxy.cn
,親測好用
export GO111MODULE=on export GOPROXY=https://goproxy.io
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
之后重啟才能生效
感謝你能夠認真閱讀完這篇文章,希望小編分享的“golang依賴管理之mod的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。