go官方包依賴管理工具之mod


1.1、go mod是什么
go mod 是Golang 1.11 版本引入的官方包(package)依賴管理工具,用於解決之前沒有地方記錄依賴包具體版本的問題,方便依賴包的管理。

之前Golang 主要依靠vendor和GOPATH來管理依賴庫,vendor相對主流,但現在官方更提倡go mod。

1.2、go mod初始化及使用
下載官方包1.11(及其以上版本將會自動支持gomod) 默認GO111MODULE=auto(auto是指如果在gopath下不啟用mod)

Golang 提供一個環境變量 GO111MODULE 來設置是否使用mod,它有3個可選值,分別是off, on, auto(默認值),具體含義如下:

off:
 查找vendor和gopath目錄

on:
 使用gomodule  忽略gopath目錄

auto: 如果當前目錄不在gopath目錄並且當前目錄下有go.md文件, 則使用GO111MODULE,否則使用GOPATH mode

修改 GO111MODULE 的值的語句是:set GO111MODULE=on

在使用模塊的時候, GOPATH 是無意義的,不過它還是會把下載的依賴儲存在 GOPATH/src/mod 中,也會把 go install 的結果放在 GOPATH/bin(如果 GOBIN 不存在的話)

go mod download
下載模塊到本地緩存, 緩存路徑:$GOPATH/pkg/mod/cache

go mod edit
提供了命令版編輯go.mod的功能, 例如  go mod edit -fmt go.mod 會格式化go.md

go mod graph 
把模塊之間的依賴圖展示出來

go mod init
初始化模塊

go mod tidy
增加缺失的包, 移除無用的包

go mod vendor
把依賴拷貝到vendor目錄下

go mod verify
確認依賴關系

go mod why
解釋為什么需要包和模塊

 

注意有幾個坑的地方:

go mod 命令在 $GOPATH 里默認是執行不了的,因為 GO111MODULE 的默認值是 auto。默認在$GOPATH 里是不會執行, 如果一定要強制執行,就設置環境變量為 on。

go mod init 在沒有接module名字的時候是執行不了的,會報錯 go: cannot determine module path for source directory。可以這樣執行:

go mod init github.com/lanlang/hello

 

更多命令:

# 查看module下的所有依賴
go list -m all

# 更新為執行版本依賴
go get rsc.io/sampler@v1.3.1

# 將依賴復制到項目目錄vendor文件夾下
go mod vendor

# 忽略cache中的包, 只使用vendor目錄中的依賴進行編譯
go build -mod=vendor




# 開啟module
windows:
set GO111MODULE=on

linux:
export GO111MODULE=on

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM