Go Module 是 Go 1.11 引入的依赖管理系统,自 Go 1.16 起成为默认模式。它解决了 GOPATH 时代的依赖地狱问题,为 Go 项目带来了可复现的构建。
go.mod 文件详解
module github.com/example/myapp
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
github.com/go-redis/redis/v8 v8.11.5
)
require github.com/google/uuid v1.4.0 // indirect
go.mod 记录模块路径、Go 版本和直接依赖。go.sum 记录每个依赖的哈希值,保证构建的可复现性。
语义版本与最小版本选择
Go 使用最小版本选择算法:在依赖图中选择所有 require 的最低兼容版本,而不是最新版本。这保证了构建的稳定性和可复现性。
常用命令
- go mod tidy:清理无用依赖,添加缺失依赖。
- go mod vendor:将依赖复制到 vendor 目录。
- go mod download:下载依赖到本地缓存。
- go mod why:解释为什么需要某个依赖。
私有模块配置
通过 GOPRIVATE、GONOSUMDB、GONOSUMCHECK 等环境变量,可以配置私有模块、跳过 checksum 检查等。
依赖管理看似简单,实则是一个项目可维护性的基础保障。