一、Go Modules
1. 介紹
Go modules是官方提供的go包管理工具,用於解決go包管理和依賴問題;從Go1.11開始引入,到現在Go1.14已經比較完善,Go1.16已經全面推薦使用,並且默認爲開啓;Go Modules類似於JS的NPM,Java的maven和gradle。
- GO111MODULE=off: 不使用 modules 功能。
- GO111MODULE=on: 使用 modules 功能,不會去 GOPATH 下面查找依賴包。
- GO111MODULE=auto: Golang 自己檢測是不是使用 modules 功能。
- 計劃在 Go1.17 中放棄對
GOPATH
將忽略GO111MODULE
,需要關注默認下載目錄如何設置,此特性靜觀1.17版本發佈;
2. 關於go.mod
go.mod
是Go項目的依賴描述文件:
module hello go 1.14 require github.com/gogf/gf v1.15.3
-
module是配置項目名稱
-
go配置的是使用的golang版本
-
require配置引用第三方依賴包路徑和版本,latest表示最新版本;
配置完編譯成功後,生成go.sum
依賴分析結果,裏面會有當前所有的依賴詳細信息;
3. go modules指令
-
go get
go get -u (沒有參數)下載、更新當前包下 直接和間接的依賴的最新版本,並不會更新整個項目。 go get -u ./...下載、更新當前項目根目錄下直接或間接的依賴的最新版本,但是會排除測試包的依賴;例如將v1.2.1更新爲v2.0.1 go get -u=patch ./...下載、更新當前項目根目錄下直接或間接的依賴的大版本的最新小版本,例如,將v1.2.1更新爲v1.2.5 go get -u -t ./... 和go get -u ./...相似,但是會更新測試包的依賴 go get -d 只執行下載動作,而不執行安裝動作;不再支持go get -m ,使用go get -d替代。
-
go list
go list -m all 列出當前項目build時需要使用直接或間接依賴的版本。 go list -u -m all 不僅會列出當前使用模塊的版本,還會列出當前使用模塊的最新小版本和最新版本。
-
go build ./... 構建當前項目
-
go test ./... 執行當前項目下的測試
-
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記錄的依賴信息是否正確
4. go modules需要注意的地方
- 在項目根目錄下生成
go.mod
- 項目中的包引用使用
import "[module名稱]/[包所在文件在項目中的相對路徑]"
二、Goland配置
首先我們需要開啓go modules功能,然後配置代理;不配置代理會訪問國外地址,會很慢;建議使用以下三個地址:
https://goproxy.io
https://goproxy.cn
https://mirrors.aliyun.com/goproxy/
項目結構:
使用上節課我們的hello world程序,創建go.mod
,內容如下
module hello go 1.14 require ( github.com/gogf/gf v1.15.3 )
代碼內容如下:
package main import ( "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.3 e10adc3949ba59abbe56e057f20f883e <nil> Process finished with exit code 0
代碼地址
教程視頻
-
騰訊課堂教程地址:golang基礎教程-快速入門go語言
-
bilibili教程地址:golang基礎教程-快速入門go語言
-
公衆號搜索:GoWeb學習之路