ModGen 代码生成工具
概述
ModGen 是一个基于 Go text/template 的代码生成工具,用于快速生成标准的 Go Web API 模块代码。该工具支持生成业务逻辑层、服务层、参数结构、数据模型、错误码以及完整的测试用例。
特性
- ✅ 基于
text/template 的模板系统,易于维护和扩展
- ✅ 支持生成完整的 CRUD 操作代码
- ✅ 自动生成测试用例(业务逻辑测试 + 服务层测试)
- ✅ 支持特殊字符和 Unicode 字符处理
- ✅ 支持强制覆盖和文件保护
- ✅ 完整的错误处理和验证
- ✅ 高性能的并发渲染
- ✅ 全面的测试覆盖
架构
muban/modgen/
├── README.md # 使用说明
├── command.go # Cobra 子命令入口
├── generator/ # 代码生成器核心
│ └── generator.go
├── openapi/ # OpenAPI 支持
├── templates/ # 模板系统
│ ├── tmpl/ # 模板文件
│ │ ├── biz.tmpl # 业务逻辑模板
│ │ ├── service.tmpl # 服务层模板
│ │ ├── param.tmpl # 参数结构模板
│ │ ├── model.tmpl # 数据模型模板
│ │ ├── code.tmpl # 错误码模板
│ │ ├── biz_test_enhanced.tmpl # 业务逻辑测试模板(增强版)
│ │ ├── service_test_enhanced.tmpl # 服务层测试模板(增强版)
│ │ ├── *.tmpl (openapi) # OpenAPI 专用模板
│ ├── template_renderer.go # 模板渲染器
│ └── *_test.go # 测试文件
└── utils/ # 路径与命名工具
使用方法
基本用法
# 生成基本模块
go run ./muban -- new module --name=user
# 生成模块并包含测试用例
go run ./muban -- new module --name=user --tests
# 强制覆盖已存在的文件
go run ./muban -- new module --name=user --force
# 基于 OpenAPI 文档批量生成
go run ./muban -- new module --all --openapi=doc/openapi.yaml
参数说明
--name: 模块名称(必需)
--tests: 生成测试用例
--force: 强制覆盖已存在的文件
--route: 自定义路由路径(可选,默认为模块名)
--openapi: 指定 OpenAPI3 文档路径
--all: 基于 OpenAPI 文档批量生成所有模块(需要配合 --openapi 使用)
生成的代码结构
每个模块会生成以下文件:
internal/
├── api/
│ ├── biz/
│ │ ├── {module}.go # 业务逻辑
│ │ └── {module}_test.go # 业务逻辑测试
│ ├── service/
│ │ ├── {module}.go # 服务层控制器
│ │ └── {module}_test.go # 服务层测试
│ │ └── param/
│ │ └── {module}.go # 参数结构
│ └── data/
│ └── model/
│ └── {module}.go # 数据模型
└── code/
└── {module}.go # 错误码定义
模板系统
模板数据
所有模板都使用统一的 TemplateData 结构:
type TemplateData struct {
Pascal string // 大驼峰命名 (User)
Camel string // 小驼峰命名 (user)
Table string // 表名 (user)
Route string // 基础路由 (/user)
PackagePath string // 包路径
BaseCode int // 错误码基础值
}
模板文件
- biz.tmpl: 业务逻辑层模板,包含 CRUD 操作
- service.tmpl: 服务层模板,包含 HTTP 控制器
- param.tmpl: 参数结构模板,包含请求/响应结构
- model.tmpl: 数据模型模板,包含 GORM 模型
- code.tmpl: 错误码模板,包含错误码定义
- biz_test_enhanced.tmpl: 业务逻辑测试模板(增强版,默认使用)
- service_test_enhanced.tmpl: 服务层测试模板(增强版,默认使用)
- *_openapi.tmpl: 基于 OpenAPI 的专用模板
测试
运行测试
# 运行所有测试
go test ./muban/modgen/... -v
# 运行模板测试
go test ./muban/modgen/templates/ -v
# 运行生成器测试
go test ./muban/modgen/generator/ -v
# 运行性能测试
go test ./muban/modgen/templates/ -bench=.
测试覆盖
- ✅ 模板渲染器单元测试
- ✅ 生成器集成测试
- ✅ 边界情况测试
- ✅ 特殊字符处理测试
- ✅ 并发安全测试
- ✅ 错误处理测试
- ✅ 性能基准测试
扩展
添加新模板
- 在
templates/tmpl/ 目录下创建新的 .tmpl 文件
- 在
template_renderer.go 中添加模板名称到 templates 列表
- 添加对应的渲染方法
- 在生成器中调用新的渲染方法
自定义模板
可以通过修改 templates/tmpl/ 目录下的模板文件来自定义生成的代码格式。
性能
- 模板渲染:~1000 次/秒
- 并发渲染:支持高并发,无竞态条件
- 内存使用:低内存占用,支持大量模块生成
错误处理
- 模板文件不存在时提供清晰的错误信息
- 参数验证失败时给出具体错误原因
- 文件写入失败时提供详细错误信息
- 支持优雅的错误恢复
贡献
欢迎提交 Issue 和 Pull Request 来改进这个工具。
许可证
Apache License 2.0