6.3 依赖管理
Go Modules 进阶
bash
# 理解 go.mod
module example.com/myapp
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
golang.org/x/sys v0.8.0 // indirect
)
replace github.com/old/pkg => github.com/new/pkg v1.0.0
exclude github.com/problematic/pkg v1.0.0
retract v1.0.0
# 依赖版本选择
go get github.com/pkg@v1.2.3
go get github.com/pkg/v2@v2.0.0 # 主版本 v2+
# 依赖升级
go get -u ./... # 升级所有依赖
go get -u=patch ./... # 只升级补丁版本
# 清理依赖
go mod tidy # 移除未使用的依赖
go mod verify # 验证依赖完整性
go clean -modcache # 清理模块缓存
# 查看依赖信息
go list -m all # 列出所有依赖
go list -m -versions github.com/pkg # 查看可用版本
go mod graph # 依赖图
go mod why github.com/pkg # 为什么需要这个依赖
go mod edit -json # JSON 格式 go.modVendor 模式
bash
# 使用 vendor
go mod vendor # 将依赖复制到项目内
go build -mod=vendor # 使用 vendor 目录构建
go test -mod=vendor ./... # 测试时使用 vendor
# vendor 优势:
# 1. 离线构建
# 2. 依赖固定
# 3. 审查依赖代码
# vendor 劣势:
# 1. 增加仓库大小
# 2. 需要手动更新