本文由golang教程欄目給大家介紹關(guān)于go module的使用方法,希望對(duì)需要的朋友有所幫助!
go module 使用
go module 在 go 1.14 版本之后被推出
一、go module 使用介紹
go module是Go1.11版本之后官方推出的版本管理工具,并且從Go1.13版本開(kāi)始,go module將是Go語(yǔ)言默認(rèn)的依賴(lài)管理工具。
1.1 GO111MODULE
要啟用go module支持首先要設(shè)置環(huán)境變量GO111MODULE,通過(guò)它可以開(kāi)啟或關(guān)閉模塊支持,它有三個(gè)可選值:off、on、auto,默認(rèn)值是auto。
-
GO111MODULE=off禁用模塊支持,編譯時(shí)會(huì)從GOPATH和vendor文件夾中查找包。 -
GO111MODULE=on啟用模塊支持,編譯時(shí)會(huì)忽略GOPATH和vendor文件夾,只根據(jù)go.mod下載依賴(lài),將依賴(lài)下載至%GOPATH%/pkg/mod/目錄下。 -
GO111MODULE=auto,當(dāng)項(xiàng)目在$GOPATH/src外且項(xiàng)目根目錄有go.mod文件時(shí),開(kāi)啟模塊支持。
簡(jiǎn)單來(lái)說(shuō),設(shè)置GO111MODULE=on之后就可以使用go module了,以后就沒(méi)有必要在GOPATH中創(chuàng)建項(xiàng)目了,并且還能夠很好的管理項(xiàng)目依賴(lài)的第三方包信息。
使用 go module 管理依賴(lài)后會(huì)在項(xiàng)目根目錄下生成兩個(gè)文件go.mod和go.sum。
1.2 GOPROXY
Go1.11之后設(shè)置GOPROXY命令為:
export GOPROXY=https://goproxy.cn
Go1.13之后GOPROXY默認(rèn)值為https://proxy.golang.org,在國(guó)內(nèi)是無(wú)法訪(fǎng)問(wèn)的,所以十分建議大家設(shè)置GOPROXY,這里我推薦使用goproxy.cn。
go env -w GOPROXY=https://goproxy.cn,direct
1.3 go mod命令
常用的go mod命令如下:
go mod download 下載依賴(lài)的module到本地cache(默認(rèn)為$GOPATH/pkg/mod目錄) go mod edit 編輯go.mod文件 go mod graph 打印模塊依賴(lài)圖 go mod init 初始化當(dāng)前文件夾, 創(chuàng)建go.mod文件 go mod tidy 增加缺少的module,刪除無(wú)用的module go mod vendor 將依賴(lài)復(fù)制到vendor下 go mod verify 校驗(yàn)依賴(lài) go mod why 解釋為什么需要依賴(lài)
1.4 go.mod
go.mod文件記錄了項(xiàng)目所有的依賴(lài)信息,其結(jié)構(gòu)大致如下:
module github.com/Q1mi/studygo/blogger go 1.12 require ( github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586 github.com/gin-gonic/gin v1.4.0 github.com/go-sql-driver/mysql v1.4.1 github.com/jmoiron/sqlx v1.2.0 github.com/satori/go.uuid v1.2.0 google.golang.org/appengine v1.6.1 // indirect )
其中,
module用來(lái)定義包名require用來(lái)定義依賴(lài)包及版本indirect表示間接引用
1.4.1 依賴(lài)的版本
go mod支持語(yǔ)義化版本號(hào),比如go get foo@v1.2.3,也可以跟git的分支或tag,比如go get foo@master,當(dāng)然也可以跟git提交哈希,比如go get foo@e3702bed2。關(guān)于依賴(lài)的版本支持以下幾種格式:
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco/msgpack.v2 v2.9.1 gopkg.in/yaml.v2 <=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e latest
1.4.2 replace
在國(guó)內(nèi)訪(fǎng)問(wèn)golang.org/x的各個(gè)包都需要翻墻,你可以在go.mod中使用replace替換成github上對(duì)應(yīng)的庫(kù)。
replace ( golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0 )
1.5 go get
在項(xiàng)目中執(zhí)行go get命令可以下載依賴(lài)包,并且還可以指定下載的版本。
- 運(yùn)行
go get -u將會(huì)升級(jí)到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號(hào), y是次要版本號(hào)) - 運(yùn)行
go get -u=patch將會(huì)升級(jí)到最新的修訂版本 - 運(yùn)行
go get package@version將會(huì)升級(jí)到指定的版本號(hào)version
如果下載所有依賴(lài)可以使用go mod download命令。
1.6 整理依賴(lài)
我們?cè)诖a中刪除依賴(lài)代碼后,相關(guān)的依賴(lài)庫(kù)并不會(huì)在go.mod文件中自動(dòng)移除。這種情況下我們可以使用go mod tidy命令更新go.mod中的依賴(lài)關(guān)系。
1.7 go mod edit
格式化
因?yàn)槲覀兛梢允謩?dòng)修改go.mod文件,所以有些時(shí)候需要格式化該文件。Go提供了一下命令:
go mod edit -fmt
添加依賴(lài)項(xiàng)
go mod edit -require=golang.org/x/text
移除依賴(lài)項(xiàng)
如果只是想修改go.mod文件中的內(nèi)容,那么可以運(yùn)行go mod edit -droprequire=package path,比如要在go.mod中移除golang.org/x/text包,可以使用如下命令:
go mod edit -droprequire=golang.org/x/text
關(guān)于go mod edit的
相關(guān)推薦
- 養(yǎng)AI龍蝦,為什么服務(wù)器選擇關(guān)乎你的數(shù)字主權(quán)
- 按場(chǎng)景選配置,養(yǎng)AI龍蝦不同用途需要什么檔次的服務(wù)器
- 養(yǎng)AI小龍蝦主流云服務(wù)器大比拼,阿里云、騰訊云、華為云怎么選
- 騰訊突然官宣:QQ 可以養(yǎng)小龍蝦了,只需兩步!
- 小白保姆級(jí)教程:不用寫(xiě)代碼在阿里云分鐘級(jí)一鍵部署OpenClaw,打造你的專(zhuān)屬 AI 員工
- 小白保姆級(jí)教程:不用寫(xiě)代碼在阿里云分鐘級(jí)一鍵部署OpenClaw,打造你的專(zhuān)屬 AI 員工
- 不用寫(xiě)代碼一鍵部署OpenClaw最新教程
- 限量秒殺,拼手速!38元搶阿里云輕量應(yīng)用服務(wù)器
站長(zhǎng)資訊網(wǎng)