Go Modules #
一、Modules概述 #
Go Modules是Go 1.11引入的依赖管理系统。
二、初始化模块 #
2.1 创建模块 #
bash
mkdir myapp
cd myapp
go mod init myapp
2.2 go.mod文件 #
text
module myapp
go 1.22
2.3 模块路径 #
bash
go mod init github.com/user/myapp
三、go.mod文件 #
3.1 文件结构 #
text
module myapp
go 1.22
require (
github.com/gin-gonic/gin v1.9.1
gorm.io/gorm v1.25.0
)
require (
github.com/some/indirect v1.0.0 // indirect
)
replace github.com/old/pkg => github.com/new/pkg v1.0.0
exclude github.com/bad/pkg v1.0.0
3.2 模块指令 #
| 指令 | 说明 |
|---|---|
| module | 模块路径 |
| go | Go版本 |
| require | 依赖 |
| replace | 替换 |
| exclude | 排除 |
| retract | 撤回 |
四、依赖管理 #
4.1 添加依赖 #
bash
go get github.com/gin-gonic/gin
go get github.com/gin-gonic/gin@v1.9.1
go get github.com/gin-gonic/gin@latest
4.2 更新依赖 #
bash
go get -u # 更新所有依赖
go get -u=patch # 更新补丁版本
go get package@latest # 更新指定包
4.3 删除依赖 #
bash
go mod tidy # 清理未使用的依赖
4.4 查看依赖 #
bash
go list -m all # 所有依赖
go list -m -versions package # 可用版本
五、go.sum文件 #
5.1 文件内容 #
text
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqFPSHk=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYksXtJXQ2i8vLhQ/hvKDnNkKNpRbHjPbKls=
5.2 作用 #
- 记录依赖的校验和
- 确保依赖完整性
- 防止篡改
六、版本控制 #
6.1 语义化版本 #
text
vMAJOR.MINOR.PATCH
v1.2.3
│ │ │
│ │ └── 补丁版本(bug修复)
│ └──── 次版本(新功能,向后兼容)
└────── 主版本(不兼容变更)
6.2 伪版本 #
text
v0.0.0-20191109021931-daa7c04131f5
用于未发布版本的提交。
6.3 +incompatible #
text
github.com/pkg/errors v0.9.1+incompatible
表示v2之前版本,未使用Go Modules。
七、常用命令 #
7.1 go mod命令 #
| 命令 | 说明 |
|---|---|
| go mod init | 初始化模块 |
| go mod tidy | 整理依赖 |
| go mod download | 下载依赖 |
| go mod verify | 验证依赖 |
| go mod graph | 依赖图 |
| go mod why | 解释依赖 |
| go mod vendor | 创建vendor目录 |
7.2 示例 #
bash
go mod init myapp
go mod tidy
go mod download
go mod verify
八、实际应用 #
8.1 项目结构 #
text
myapp/
├── cmd/
│ └── myapp/
│ └── main.go
├── internal/
│ └── service/
├── pkg/
│ └── utils/
├── go.mod
└── go.sum
8.2 多模块项目 #
text
myapp/
├── module1/
│ └── go.mod
├── module2/
│ └── go.mod
└── go.work
go.work:
text
go 1.22
use (
./module1
./module2
)
8.3 私有模块 #
bash
go env -w GOPRIVATE=github.com/mycompany/*
九、最佳实践 #
9.1 定期更新 #
bash
go get -u
go mod tidy
9.2 使用vendor #
bash
go mod vendor
go build -mod=vendor
9.3 版本锁定 #
bash
go get package@v1.2.3
十、总结 #
Go Modules要点:
| 文件 | 说明 |
|---|---|
| go.mod | 模块定义 |
| go.sum | 依赖校验 |
关键点:
- 初始化:go mod init
- 依赖管理:go get、go mod tidy
- 版本控制:语义化版本
- 私有模块:配置GOPRIVATE
- vendor模式:离线构建
准备好学习包导入了吗?让我们进入下一章!
最后更新:2026-03-26