modgen

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2025 License: Apache-2.0 Imports: 5 Imported by: 0

README

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=.
测试覆盖
  • ✅ 模板渲染器单元测试
  • ✅ 生成器集成测试
  • ✅ 边界情况测试
  • ✅ 特殊字符处理测试
  • ✅ 并发安全测试
  • ✅ 错误处理测试
  • ✅ 性能基准测试

扩展

添加新模板
  1. templates/tmpl/ 目录下创建新的 .tmpl 文件
  2. template_renderer.go 中添加模板名称到 templates 列表
  3. 添加对应的渲染方法
  4. 在生成器中调用新的渲染方法
自定义模板

可以通过修改 templates/tmpl/ 目录下的模板文件来自定义生成的代码格式。

性能

  • 模板渲染:~1000 次/秒
  • 并发渲染:支持高并发,无竞态条件
  • 内存使用:低内存占用,支持大量模块生成

错误处理

  • 模板文件不存在时提供清晰的错误信息
  • 参数验证失败时给出具体错误原因
  • 文件写入失败时提供详细错误信息
  • 支持优雅的错误恢复

贡献

欢迎提交 Issue 和 Pull Request 来改进这个工具。

许可证

Apache License 2.0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewCommand

func NewCommand() *cobra.Command

NewCommand builds the Cobra command for module scaffolding generation.

func Run

func Run(opts Options) error

Run executes the module generation with the provided options.

Types

type Options

type Options struct {
	Name          string
	Route         string
	Force         bool
	OpenAPIFile   string
	GenerateTests bool
	GenerateAll   bool
}

Options captures the CLI parameters for module generation.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL