Skip to content

10.1 概述与架构 ​

概述

代码生成器根据表结构一键产出前后端全套文件,并同步创建菜单、权限节点、字典数据、路由注册行(全部幂等)。双入口:HTTP(管理页面)与 CLI(cmd/generator)。核心在 internal/logic/generator.go + generator_side.go。

定位 ​

text
输入:表名列表("表名|注释")
产出:
  后端八件套(api/controller/logic/service + dao index/internal + entity + do)
  前端文件(api/{域}/{模块}.ts + views/{域}/{模块}/ 五件或三件)
  幂等副作用:菜单 + 权限节点 + 字典 + router.go 注册行
约束:生成的 logic 是 ModuleSpec 基座风格的完整可用实现,
     go build 后即可运行;复杂业务再手工扩展钩子

双入口 ​

text
HTTP(/api/generator,管理页面"代码生成"):
  GET  /api/generator/page           sys:generator:page          数据表清单(分页)
  POST /api/generator/preview        sys:generator:generator     预览(不落盘)
  POST /api/generator/generate       sys:generator:generator     一键生成
  POST /api/generator/batchGenerate  sys:generator:batchGenerator 批量生成
  日志 logType=generate(19 代码生成)

CLI(仓库根目录,读同一份 config.yaml):
  go run ./cmd/generator -tables "goframe_example|案例演示表"
  CLI 空白 import internal/logic 注册全部服务,直接调用 service.Generator()

总体流水线 ​

text
输入 tables[]("表名|注释")
      │
      ▼
buildVars:TableFields 内省 → 类型/注释解析 → 字段分桶(列表/表单/筛选)
      │            命名:module/Pascal/camelLower;域归属;ui|ui2 模板类型
      ▼
skipTables? ──是(role_menu/user_role)──▶ 仅 buildVars(副作用用),跳过文件
      │ 否
      ▼
renderTable:逐模板渲染(后端 {{ }} / 前端 [[ ]])→ go 产物 gofmt
      │
      ▼
writeFile×N(四态:新写/跳过/覆盖/失败)
      │
      ▼
副作用(幂等):createMenu(+权限节点) → createDict(枚举字段) → registerRouter
      │
      ▼
结果报告(Generated/Skipped/Overwritten/Failed + Menu/Dict/Route)
      │
      ▼
提示:go build ./... 并重启服务

域归属与模板类型 ​

text
genDomainMap 域归属(决定前端 api/views 目录):
  user/role/menu/dept/level/position/tenant → system
  config/param/dict/notice/city             → data
  article/category/link                      → content
  operation_log/login_log/job/…             → monitor
  example/file_template/…                   → tool(默认)

模板类型:有 parent_id/pid 列 → ui2(树形模板),否则 ui(普通列表模板)
排序默认:有 sort 列 → "sort asc",否则 "id desc"

与 gf gen dao 的分工 ​

工具用途
gf gen dao -c hack/config.yaml表结构变更后刷新已有模块 dao(自定义模板挂钩子+Ctx;overwriteDao:false 保留手工扩展)
生成器新模块一键产出(dao 四件与 gf gen dao 同构,生成后统一 gofmt 可直接编译)
gf gen service禁止整体运行(service 接口为手工重组维护)

保护策略速览 ​

text
skipTables:仅关联表 role_menu/user_role 整表跳过文件生成
           (副作用照常执行)
文件粒度四态:缺失补生成(Generated)/ 已存在跳过(Skipped)
            / 开覆盖时覆盖(Overwritten)/ 失败(Failed)
覆盖开关唯一入口:generator.overwrite(config.yaml)

详见 10.5 代码生成引擎 与 10.7 配置文件详解。

小蚂蚁云团队 · 提供技术支持