Z
ZHANK
编程在线教程Go 教程Go Modules 模块管理
工程化

Go Modules 模块管理

go mod init/tidy、go.sum、replace 本地替换、版本语义

Go Modules 模块管理

Go Modules(go mod)从 1.11 起是官方依赖管理方案。和 npm/pip 不同——不设中央仓库,直接从 Git 仓库拉。

学完本章你将: 掌握 go mod init/tidy、go.sum、replace、版本语义。


初始化模块

bash
# 创建模块
go mod init github.com/username/myapp

# 生成 go.mod
# module github.com/username/myapp
# go 1.22

添加依赖

go
// main.go
import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{"msg": "Hello"})
    })
    r.Run()
}
bash
go mod tidy  # 自动下载依赖 + 更新 go.mod/go.sum

go.mod 详解

module github.com/username/myapp

go 1.22

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

// replace —— 本地替换(调试时非常有用)
replace github.com/xxx/yyy => ../local-yyy

// exclude —— 排除某个版本
exclude github.com/bad/lib v1.0.0

go.sum 与版本选择

bash
# go.sum —— 记录依赖的哈希值(保证完整性)
# 使用语义版本控制:v主版本.次版本.补丁
# v1.2.3 → 1(主版本) 2(次版本) 3(补丁)
# /v2 后缀表示主版本 > 1(如 github.com/foo/bar/v2)

💡 go.sum 应该提交到 Git——它保证所有人拿到完全相同的依赖版本。