Skip to content

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.mod

Vendor 模式 ​

bash
# 使用 vendor
go mod vendor                    # 将依赖复制到项目内
go build -mod=vendor             # 使用 vendor 目录构建
go test -mod=vendor ./...        # 测试时使用 vendor

# vendor 优势:
# 1. 离线构建
# 2. 依赖固定
# 3. 审查依赖代码

# vendor 劣势:
# 1. 增加仓库大小
# 2. 需要手动更新