1、为什么需要 Go Modules?
在早期的 Go 版本(Go 1.11 之前),依赖管理的代码通常放在 $GOPATH/src 下,依赖版本混乱、难以复现。于是 Go 官方推出了 Go Modules,让 Go 项目支持像 Java 的 Maven、Node 的 npm 那样的现代化依赖管理系统。
2、什么是模块(Module)?
模块(Module)是一组Go包的集合,他由一个模块路径(如 github.com/imoowi/comer),并且由一个文件go.mod定义。可以理解为:一个模块就是一整个项目(包括依赖描述)。模块之下可以由很多包(package)
$ tree comer/
comer/ <- 模块路径
|-- cmd <- cmd包
| | `-- root.go
|-- comer <- comer包
| | `-- comer.add.go
|-- go.mod
|-- main.go <- main包
3、Go Modules 的核心文件:go.mod
在项目根目录执行以下命令:
go mod init basketball-mates
会生成一个go.mod文件:
// module是模块名
module basketball-mates
// go版本号
go 1.23.0
// 列出依赖包及其版本
require (
github.com/casbin/casbin/v2 v2.128.0
github.com/spf13/cobra v1.7.0
github.com/spf13/viper v1.21.0
gorm.io/gorm v1.31.0
)
4、版本选择机制(语义化版本号)
Go Modules 遵循 语义化版本:
格式为:v[主版本号].[次版本号].[修订号]
例如:v1.2.3
主版本号变更 → 可能有不兼容更新
次版本号变更 → 新功能但兼容旧代码
修订号变更 → Bug 修复或优化
提示: Go 会自动根据 go.mod 中的版本拉取依赖,保证编译环境一致。 使用 go install 可升级或降级依赖。
5、常用go命令
go mod init <module> 初始化一个新模块
go mod tidy 自动清理、补全依赖
go mod download 下载依赖包到本地缓存
go mod verify 校验依赖一致性
go list -m all 列出当前所有依赖模块
go install <pkg>@<version> 添加或升级指定依赖版本
go mod vendor 将依赖复制到项目内的 vendor 目录
6、Go Modules 工作流程
go.mod
↓
依赖分析(require)
↓
下载依赖到本地缓存($GOPATH/pkg/mod)
↓
构建项目
↓
go.sum 校验依赖版本
你可以把Go Modules想象成一个智能购物清单:
go.mod 是购物单,列出需要的物品(依赖);
go.sum 是购物小票,记录每件物品的具体版本号和校验信息;
go mod tidy 就像打扫仓库,把没用的东西清理干净,并且找到需要的东西。
源码地址
1、公众号“Codee君”回复“源码”获取源码
如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!