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