每日一Go-13、Go语言包管理与模块化开发

45 阅读2分钟

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君”回复“源码”获取源码

2、pan.baidu.com/s/1B6pgLWfS… 


如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!