当前位置: 首页 > news >正文

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

注意事项

  1. 标签格式必须正确

    • 主模块:v1.3.3
    • 子模块:dzhgo/v1.3.3
  2. 模块路径必须正确

    • 主模块:module github.com/gzdzh-cn/dzhcore
    • 子模块:module github.com/gzdzh-cn/dzhcore/dzhgo
  3. Go Proxy 同步有延迟

    • 官方 proxy.golang.org 通常几分钟内同步
    • 国内 goproxy.cn 可能需要更长时间
  4. 仓库必须是公开的

    • Go Proxy 只收录公开仓库的版本
  5. 测试时不要在本地模块目录

    • 不要在 dzhcore 或 dzhgo 目录下测试 go get
    • 使用全新空目录测试

参考文档

  • Go Modules: Publishing multi-module repositories
  • Go Modules: Module version numbering
http://www.dtcms.com/a/299916.html

相关文章:

  • 详解Aerospike数据库在Linux系统上的安装流程
  • LLM中 词嵌入向量中的正负值表示什么含义
  • Aerospike与Redis深度对比:从架构到性能的全方位解析
  • 【HTML】<script>元素中的 defer 和 async 属性详解
  • 认识泛型、泛型类和泛型接口
  • 服务器生成图片
  • 力扣872. 叶子相似的树
  • Ubuntu系统安装EasyTier组网
  • rt-thread 5.2.1 基于at-start-f437开发过程记录
  • Flutter开发 BUG 记录 (持续更新)
  • [特殊字符] 嵌入式队列精要指南:数据流的艺术与实战
  • Python爬虫实战:研究furl库相关技术
  • 阿里开源Qwen3-Coder,编程大模型进入高效时代
  • 文件操作认识
  • 差模干扰 共模干扰
  • QUIC协议如何在UDP基础上解决网络切换问题
  • PCIe 的L状态(链路状态)和D状态(设备状态)
  • 命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
  • oracle数据库表空间碎片整理
  • 基于java的在线教育平台管理系统、在线学习系统的设计与实现
  • 图解同步/异步,阻塞/非阻塞,五种模型之差
  • 【AcWing 830题解】单调栈
  • Node.js 模拟 Linux 环境
  • 栈----2.最小栈
  • S7-200 SMART 数字量 I/O 组态指南:从参数设置到实战案例
  • OpenFeign-远程调用
  • 解决英文版Windows10安装WireShark报错
  • 秋招Day19 - 分布式 - 分布式设计
  • MySQL事务原理
  • C 与 C++ 的区别:发展、特性及优缺点详解