介紹
Go modules是官方提供的go包管理工具,用于解決go包管理和依賴問題;從1.11開始引入,到現(xiàn)在1.14已經(jīng)比較完善,1.16已經(jīng)全面推薦使用,并且默認(rèn)為開啟;Go Modules類似于JS的NPM,Java的maven和gradle。
- GO111MODULE=off: 不使用 modules 功能
- GO111MODULE=on: 使用 modules 功能,不會(huì)去 GOPATH 下面查找依賴包
- GO111MODULE=auto: Golang 自己檢測(cè)是不是使用 modules 功能
- 計(jì)劃在 Go 1.17 中放棄對(duì) GOPATH將忽略 GO111MODULE,需要關(guān)注默認(rèn)下載目錄如何設(shè)置,此特性靜觀1.17版本發(fā)布
關(guān)于go.mod
module hellogo 1.14require github.com/gogf/gf v1.15.3
配置完編譯成功后,生成go.sum依賴分析結(jié)果,里面會(huì)有當(dāng)前所有的依賴詳細(xì)信息;
go modules指令
go get -u (沒有參數(shù))下載、更新當(dāng)前包下 直接和間接的依賴的最新版本,并不會(huì)更新整個(gè)項(xiàng)目。go get -u ./…下載、更新當(dāng)前項(xiàng)目根目錄下直接或間接的依賴的最新版本,但是會(huì)排除測(cè)試包的依賴;例如將v1.2.1更新為v2.0.1go get -u=patch ./…下載、更新當(dāng)前項(xiàng)目根目錄下直接或間接的依賴的大版本的最新小版本,例如,將v1.2.1更新為v1.2.5go get -u -t ./… 和go get -u ./…相似,但是會(huì)更新測(cè)試包的依賴go get -d 只執(zhí)行下載動(dòng)作,而不執(zhí)行安裝動(dòng)作;不再支持go get -m ,使用go get -d替代。
2. go list
go list -m all 列出當(dāng)前項(xiàng)目build時(shí)需要使用直接或間接依賴的版本。 go list -u -m all 不僅會(huì)列出當(dāng)前使用模塊的版本,還會(huì)列出當(dāng)前使用模塊的最新小版本和最新版本。
3.go build ./… 構(gòu)建當(dāng)前項(xiàng)目
4.go test ./… 執(zhí)行當(dāng)前項(xiàng)目的測(cè)試
5.go mod
go mod tidy 刪除不必要的依賴,添加OS, architecture, and build tags組合所需要的依賴。 go mod vendor 可選步驟,用于建立vendor文件夾,用于vendor機(jī)制的包管理go mod init 將go項(xiàng)目初始化成module-mode,使用go modules進(jìn)行依賴管理。go mod verify 校驗(yàn)go.sum記錄的依賴信息是否正確
go modules需要注意的地方
- 在項(xiàng)目目錄下生成go.mod
- 項(xiàng)目中的包引用使用import “[module名稱]/[包所在文件在項(xiàng)目中的相對(duì)路徑]”
Goland配置
首先我們需要開啟go modules功能,然后配置代理;不配置代理會(huì)訪問國(guó)外地址,會(huì)很慢;建議使用以下三個(gè)地址:
- https://goproxy.io
- https://goproxy.cn
- https://mirrors.aliyun.com/goproxy/
項(xiàng)目結(jié)構(gòu):
創(chuàng)建go.mod,內(nèi)容如下
module hellogo 1.14require (github.com/gogf/gf v1.15.3)
代碼內(nèi)容如下:
package mainimport ( “fmt” “github.com/gogf/gf” “github.com/gogf/gf/crypto/gmd5”)func main(){ fmt.Println(“hello world!”) fmt.Println(gf.VERSION) fmt.Println(gmd5.EncryptString(“123456”))}
第一次我們需要下載依賴包,可以選擇go.mod文件右鍵選擇Go Mod Tidy
或者點(diǎn)擊沒下載的包,alt+enter鍵,選擇Sync packages of hello
然后運(yùn)行程序看到運(yùn)行結(jié)果
hello world!v1.15.3e10adc3949ba59abbe56e057f20f883e Process finished with exit code 0