Go Modules 是 Go 官方的依賴管理方案。從 Go 1.11 引入,Go 1.16 後成為預設模式。

初始化模組#

# 建立新模組
go mod init github.com/username/myproject

# 這會建立 go.mod 檔案

go.mod 檔案結構#

module github.com/username/myproject

go 1.21

require (
    github.com/gin-gonic/gin v1.9.1
    golang.org/x/sync v0.3.0
)

require (
    // 間接依賴
    github.com/bytedance/sonic v1.9.1 // indirect
)

常用命令#

# 下載依賴
go mod download

# 整理依賴(移除未使用的,加入缺少的)
go mod tidy

# 檢視依賴關係圖
go mod graph

# 驗證依賴完整性
go mod verify

# 把依賴複製到 vendor 目錄
go mod vendor

建議在專案根目錄執行 go mod tidy 自動整理依賴。它會移除未使用的依賴,並加入程式碼中引用但 go.mod 中缺少的依賴。

版本選擇規則#

Go Modules 遵循語意化版本(Semantic Versioning)規範:

  • v1.2.3:主版本.次版本.修訂版本
  • 主版本 0 或 1 時,匯入路徑不變
  • 主版本 2 及以上時,匯入路徑要加入版本後綴
import (
    "github.com/user/pkg"      // v0.x.x 或 v1.x.x
    "github.com/user/pkg/v2"   // v2.x.x
    "github.com/user/pkg/v3"   // v3.x.x
)
go.sum 檔案說明

go.sum 記錄所有依賴的加密雜湊值,用於驗證下載的模組是否被篡改:

github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqFPSdI=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL8YrYN+...

每個依賴會有兩行記錄:

  • 第一行:模組內容的雜湊值
  • 第二行:go.mod 檔案的雜湊值