原文轉載 Go Modules 詳解使用
Module
自從 Go
官方從去年推出 1.11 之後,增加新的依賴管理模組並且更加易於管理專案中所需要的模組。模組是儲存在檔案樹中的 Go 包的集合,其根目錄中包含 go.mod 檔案。 go.mod 檔案定義了模組的模組路徑,它也是用於根目錄的匯入路徑,以及它的依賴性要求。每個依賴性要求都被寫為模組路徑和特定語義版本。
從 Go 1.11 開始,Go 允許在 $GOPATH/src 外的任何目錄下使用 go.mod 建立專案。在 $GOPATH/src 中,為了相容性,Go 命令仍然在舊的 GOPATH 模式下執行。從 Go 1.13 開始,模組模式將成為預設模式。
本文將介紹使用模組開發 Go 程式碼時出現的一系列常見操作:
- 建立一個新模組。
- 新增依賴項。
- 升級依賴項。
- 刪除未使用的依賴項。
下面使用的案例都是以 GIN
模組為例。
在這之前呢,需要先設定一些環境變數:
export GO111MODULE=on
export GOPROXY=https://goproxy.io // 設定代理
建立一個新模組
你可以在 $GOPATH/src 之外的任何地方建立一個新的目錄。比如:
mkdir backend && cd backend
然後初始化 go mod init backend
,成功之後你會發現目錄下會生成一個 go.mod
檔案.
$ cat go.mod
內容如下
module backend
go 1.12
新增依賴項
建立一個檔案 main.go 然後加入以下程式碼,這裡直接 import 了 gin 的依賴包。
vim main.go
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() // listen and serve on 0.0.0.0:8080
}
go build 之後,會在 go.mod 引入所需要的依賴包。之後再來看看 go.mod 檔案的情況。
module backend
go 1.12
require (
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 // indirect
github.com/gin-gonic/gin v1.3.0
github.com/golang/protobuf v1.3.1 // indirect
github.com/mattn/go-isatty v0.0.7 // indirect
github.com/ugorji/go v1.1.4 // indirect
gopkg.in/go-playground/validator.v8 v8.18.2 // indirect
gopkg.in/yaml.v2 v2.2.2 // indirect
require 就是 gin 框架所需要的所有依賴包 並且在每個依賴包的後面已經表明了版本號
升級依賴項
首先我們需要檢視以下我們使用到的依賴列表
> $ go list -m all
// 你會看到所有專案使用的依賴包
backend
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3
github.com/gin-gonic/gin v1.3.0
github.com/golang/protobuf v1.3.1
github.com/mattn/go-isatty v0.0.7
github.com/ugorji/go v1.1.4
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
gopkg.in/go-playground/validator.v8 v8.18.2
gopkg.in/yaml.v2 v2.2.2
因為這裡使用的是最新的版本,無法升級,所以這裡給出一個回退的例子。將 GIN 框架的版本回退到上個版本。這裡需要使用一個命令檢視依賴的版本歷史。
>$ go list -m -versions github.com/gin-gonic/gin
// 將會列出 Gin 版本歷史
github.com/gin-gonic/gin v1.1.1 v1.1.2 v1.1.3 v1.1.4 v1.3.0
將版本更新到上個版本,這裡只是個演示。
>$ go get github.com/gin-gonic/gin@v1.1.4 // 只需要在依賴後面加上 @version 就可以了
>$ go list -m all
// 看到了版本變化
github.com/gin-gonic/gin v1.1.4
或者可以使用 go mod
來進行版本的切換, 這樣就需要兩個步驟了
>$ go mod edit -require="github.com/gin-gonic/gin@v1.1.4" // 修改 go.mod 檔案
>$ go tidy //下載更新依賴
go.tidy
會自動清理掉不需要的依賴項,同時可以將依賴項更新到當前版本
使用起來這是一個很簡單過程,只需要幾個命令,你便可以知道依賴的版本資訊,以及自由選擇安裝的版本,一切都變得這麼簡單。
刪除未使用的依賴項
如果你在專案過程需要移除一些不需要的依賴,可以使用下面的命令來執行:
>$ go mod tidy
更多關於 go mod 的使用命令
>$ go mod
The commands are:
download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph
init initialize new module in current directory
tidy add missing and remove unused modules
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed
結論
Go Module 是 Go 依賴管理的未來。 目前只有 1.11 和 1.12 版本支援該功能,介紹了 Go 依賴管理的功能。更多的功能會在以後補充。也歡迎補充完善。最後如果你是使用 Goland
, 請移步這裡Working with Go Modules
閱讀關於使用 Modules 開發
本作品採用《CC 協議》,轉載必須註明作者和本文連結