go modules
宣告
本文部分內容引用了@JaguarJack的《Go Modules 詳解使用》
go modules是Golang 1.11增加新特性,是Golang自帶的依賴管理工具。在Golang v1.11和v1.12版本中,go modules預設是沒有開啟的,需要設定環境變數GO111MODULE
,從v1.13版本開始,go module預設開啟。
GO111MODULE
如果你的Golang版本是v1.11和v1.12,需要通過設定環境變數GO111MODULE
來開啟go modules功能。
GO111MODULE有3個值off、on、auto:
- GO111MODULE=off:關閉go modules功能,在編譯的時候仍舊在$GOPATH/src或者vendor目錄中尋找依賴
- GO111MODULE=on:開啟go modules功能,在編譯時不會在$GOPATH/src或者vendor目錄中尋找依賴。此時,開發者可以將專案目錄建立在$GOPATH/src目錄之外任意位置,且專案根目錄生成go.mod檔案。同時,依賴包不再存放在$GOPATH/src目錄,而是存放在$GOPATH/pkg/mod目錄,多個專案可以共享快取的modules。
- GO111MODULE=auto:Golang v1.13的預設值,如果專案不在$GOPATH/src目錄,且專案根目錄有go.mod檔案,則開啟go modules功能
設定GO111MODULE
如果你的Golang版本是v1.13及以上 (goproxy官方推薦)
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
如果你的Golang版本是v1.11和v1.12
(1) Linux系統
在/etc/profile
檔案新增如下命令,然後執行source /etc/profile
使配置檔案生效。
export GO111MODULE=on
export GOPROXY=https://goproxy.io
(2) Windows環境
使用Powershell執行如下命令:
$env:GO111MODULE="on"
$env:GOPROXY="https://goproxy.io"
go mod
Golang提供了一系列go mod
相關命令用來管理依賴,命令列表如下:
命令 | 說明 |
---|---|
init | 在當前目錄初始化module,生成go.mod檔案 |
download | 下載go.mod檔案中指定的依賴 |
edit | 編輯go.mod檔案 |
tidy | 下載缺少的依賴,刪除無用的依賴 |
vendor | 在專案中建立vendor目錄,然後將依賴包複製到vendor目錄 |
graph | 顯示各個依賴包之間的關係圖 |
verify | 驗證依賴是否正確 |
why | 解釋為什麼需要依賴 |
go mod init
在任意位置建立目錄,使用go mod init
命令來初始化module,在當前目錄生成go.mod檔案。
cd ~ & mkdir -p gomod/demo
cd gomod/demo
go mod init demo
生成完go.mod檔案後,其檔案內容會被go toolchain掌控,當執行go build
、go run
、go test
、go get
等命令時都會對go.mod檔案進行維護。
go mod edit
現在在demo專案中新建main.go檔案,嘗試在demo中使用gin框架。
首先,下載gin框架:
go get -u github.com/gin-gonic/gin
然後,在main.go檔案中使用gin框架,下面的示例來自gin框架文件:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 監聽並在 0.0.0.0:8080 上啟動服務
}
執行go run main.go
命令,此時go.mod檔案內容如下:
module learngin
go 1.13
require github.com/gin-gonic/gin v1.6.3 // indirect
從go.mod檔案可以看出,引入的gin框架版本是v1.6.3,接下來可以使用go mod edit
命令自由的切換不同版本的依賴。
首先,檢視gin框架的歷史版本:
go list -m -versions github.com/gin-gonic/gin
列出如下歷史版本:
然後,將gin框架更新至指定的版本:
// 修改go.mod檔案
go mod edit -require="github.com/gin-gonic/gin@v1.6.2"
// 下載缺少的依賴,刪除無用的依賴
go mod tidy
除此之外,還可以使用go get
來更新依賴版本:
// 在依賴後面加上@version指定版本號
go get github.com/gin-gonic/gin@v1.6.2
go mod tidy
使用go mod tidy
命令會自動刪除專案中不需要的依賴,同時下載缺少的依賴。
總結
本文首先是簡單的介紹了Golang v1.11增加的一個新特性go modules;然後介紹瞭如何開啟go modules功能以及配置代理;最後是介紹了幾個常用go mod命令。
生命不息,學習不止
本作品採用《CC 協議》,轉載必須註明作者和本文連結