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 配置文件详解。