Go 多模块仓库标签管理教程
为了方便自己开发,自己写了个小工具:DzhGO 代码生成工具
功能特点标题
- 初始化项目基础结构
- 生成插件模块代码
- 生成模型和实体代码
- 生成服务接口和实现代码
- 支持 admin 和 app 两种模块类型
- 生成项目基础目录
具体介绍看仓库:
https://github.com/gzdzh-cn/dzhcore/tree/master/dzhgo
因为要用到仓库多模块打标签,以下是自己项目的操作实例和步骤
Go 多模块仓库标签管理教程
目录结构
dzhcore/ # 主仓库根目录
├── go.mod # 主模块:module github.com/gzdzh-cn/dzhcore
├── main.go # 主模块入口文件
├── core.go # 主模块代码
├── dzhgo/ # 子模块目录
│ ├── go.mod # 子模块:module github.com/gzdzh-cn/dzhcore/dzhgo
│ ├── main.go # 子模块入口文件
│ ├── cmd/ # 子模块命令目录
│ │ ├── root.go
│ │ └── ...
│ └── version/ # 版本信息
│ └── version.go
└── README.md
模块配置
1. 主模块 go.mod
module github.com/gzdzh-cn/dzhcorego 1.24.5require (github.com/gogf/gf/v2 v2.9.0// ... 其他依赖
)
2. 子模块 go.mod
module github.com/gzdzh-cn/dzhcore/dzhgogo 1.24.5require github.com/gogf/gf/v2 v2.9.0
// ... 其他依赖
标签管理策略
主仓库标签
- 格式:
v1.3.3
- 用途:标识主模块
github.com/gzdzh-cn/dzhcore
的版本 - 安装命令:
go install github.com/gzdzh-cn/dzhcore@v1.3.3
子模块标签
- 格式:
dzhgo/v1.3.3
- 用途:标识子模块
github.com/gzdzh-cn/dzhcore/dzhgo
的版本 - 安装命令:
go install github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3
操作步骤
1. 准备工作
# 确保在主仓库根目录
cd /path/to/dzhcore# 检查当前状态
git status
git remote -v
2. 创建主仓库标签
# 确保所有更改已提交
git add .
git commit -m "准备发布 v1.3.3"# 推送最新代码
git push github master# 创建主仓库标签
git tag v1.3.3# 推送标签到远程
git push github v1.3.3
3. 创建子模块标签
# 创建子模块标签(在主仓库根目录)
git tag dzhgo/v1.3.3# 推送子模块标签到远程
git push github dzhgo/v1.3.3
4. 验证标签
# 查看所有标签
git tag -l# 查看标签详情
git show v1.3.3
git show dzhgo/v1.3.3# 查看标签指向的 commit
git log --oneline v1.3.3
git log --oneline dzhgo/v1.3.3
调试和验证
1. 检查模块配置
# 检查主模块 go.mod
head -1 go.mod
# 应该输出:module github.com/gzdzh-cn/dzhcore# 检查子模块 go.mod
head -1 dzhgo/go.mod
# 应该输出:module github.com/gzdzh-cn/dzhcore/dzhgo
2. 验证标签指向的内容
# 检查标签指向的 commit 下,子模块 go.mod 内容
git show v1.3.3:dzhgo/go.mod | head -1
git show dzhgo/v1.3.3:dzhgo/go.mod | head -1# 检查子模块目录结构
git show v1.3.3:dzhgo/
git show dzhgo/v1.3.3:dzhgo/
3. 测试 Go Proxy 收录
# 等待几分钟让 Go Proxy 同步,然后测试# 使用官方 Go Proxy 测试主模块
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore# 使用官方 Go Proxy 测试子模块
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore/dzhgo# 使用国内 Go Proxy 测试
go list -m -versions github.com/gzdzh-cn/dzhcore
go list -m -versions github.com/gzdzh-cn/dzhcore/dzhgo
4. 测试安装命令
# 创建测试目录
mkdir /tmp/gotest
cd /tmp/gotest# 测试主模块安装
go mod init gotest
go get github.com/gzdzh-cn/dzhcore@v1.3.3# 测试子模块安装
go install github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3# 验证安装
dzhgo --version
5. 调试常见问题
# 如果子模块查不到版本,检查标签格式
git tag | grep dzhgo# 如果安装失败,检查模块路径
curl https://proxy.golang.org/github.com/gzdzh-cn/dzhcore/dzhgo/@v/list# 强制刷新 Go Proxy 缓存
GOPROXY=https://proxy.golang.org go get -x github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3
完整操作示例
# 1. 准备发布
cd /path/to/dzhcore
git add .
git commit -m "发布 v1.3.3 版本"
git push github master# 2. 创建标签
git tag v1.3.3
git tag dzhgo/v1.3.3
git push github v1.3.3
git push github dzhgo/v1.3.3# 3. 验证标签
git tag -l
git show v1.3.3:dzhgo/go.mod | head -1
git show dzhgo/v1.3.3:dzhgo/go.mod | head -1# 4. 等待 Go Proxy 同步(5-10分钟)
sleep 300# 5. 测试版本查询
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore
GOPROXY=https://proxy.golang.org go list -m -versions github.com/gzdzh-cn/dzhcore/dzhgo# 6. 测试安装
mkdir /tmp/gotest && cd /tmp/gotest
go mod init gotest
go install github.com/gzdzh-cn/dzhcore/dzhgo@v1.3.3
dzhgo --version
注意事项
-
标签格式必须正确:
- 主模块:
v1.3.3
- 子模块:
dzhgo/v1.3.3
- 主模块:
-
模块路径必须正确:
- 主模块:
module github.com/gzdzh-cn/dzhcore
- 子模块:
module github.com/gzdzh-cn/dzhcore/dzhgo
- 主模块:
-
Go Proxy 同步有延迟:
- 官方 proxy.golang.org 通常几分钟内同步
- 国内 goproxy.cn 可能需要更长时间
-
仓库必须是公开的:
- Go Proxy 只收录公开仓库的版本
-
测试时不要在本地模块目录:
- 不要在 dzhcore 或 dzhgo 目录下测试 go get
- 使用全新空目录测试
参考文档
- Go Modules: Publishing multi-module repositories
- Go Modules: Module version numbering