10.9 常见问题
概述
生成器 FAQ 按"识别/产出/副作用/覆盖"分组。核心认知:生成器是"首次产出"工具,已生成模块的演进走标准开发流程(见第 3 章)。
识别类
Q:枚举没识别/字典没建
注释格式须为 字段名:1-正常 2-禁用(-、—、=、= 均可分隔)。非 MySQL 库内省不到列注释——在 MySQL 上生成,或人工补注释后重新生成。
Q:图片/富文本列识别错
图片:注释含 图片/头像/封面,或列名含 avatar/cover/image/icon/photo。 富文本:注释含 富文本,或 TextField 且列名含 content/body/editor。 不满足则手工在 logic 的 FileFields/ContentFields 补声明。
Q:域名归属错了(前端路径不对)
genDomainMap 决定域(user→system、config→data、article→content、operation_log→monitor、默认 tool)。自定义表未匹配时落 tool——前端文件会生成到 tool 目录,可生成后移动并改菜单 path(或接受 tool 归属)。
Q:筛选字段不符合预期
筛选字段生成规则:CharField 非图片非 URL 列作 LIKE;带枚举的 Integer/Boolean → Select;*_id 外键 → InputNumber。URL 列(website/site/url/link)自动排除。生成后手工调 querySchemas。
产出类
Q:生成后编译失败
看 Failed 报告项。Go 产物 gofmt 失败会中断该文件。常见:表结构特殊类型映射异常——检查列类型/注释后重试。
Q:生成的 logic 需要改很多
生成器产出的是"完整可用的标准实现"——标准 CRUD/筛选/字典/文件字段开箱即用。复杂业务(多表联动/特殊流程)在钩子里扩展或手写方法(合法逃生舱),不必强求全部塞进声明。
Q:前端页面路由 404
菜单 component 值 = /{domain}/{moduleCamel}/index,与生成的 views 文件路径一致才有效。检查:菜单是否创建成功(Menu.Message)、角色是否勾选、重启是否执行。
副作用类
Q:菜单/权限节点没创建
看 Menu 报告项 Message。常见:parentMenuId 指向不存在的父级;或 path+type=0 查重命中(已存在,幂等跳过——正常)。
Q:字典创建了但页面选项还是静态的
querySchemas 生成的是静态 options 示例——手工改为字典驱动(getDictItemList)。后端 {field}Text 已由 SerializeMaps 声明自动填充。
Q:路由注册失败
Route.Message 提示原因:router.go 不存在 / 缺 controller 导入 / 未找到锚点(最后一个 Bind 行)。手工在 registerControllers 末尾补 Bind(s, new(controller.CXxx)) 后重启。
Q:租户级表数据不隔离
生成器不维护 tenantTables——手工把表名加入 internal/model/hooks/hooks.go 后重启(漏登=跨租户泄漏,安全红线)。
覆盖类
Q:重复生成会覆盖手工修改吗
默认不会(overwrite=false 时已存在文件 Skipped)。overwrite=true 时全部覆盖(计入 Overwritten)——覆盖前务必备份或临时改回 false。
Q:改了模板后已有模块会更新吗
不会——已存在文件跳过。模板变更只影响新生成文件;已有模块需手动合并模板差异。
Q:Skipped 太多想全部重新生成
1. git status 确认手工改动已提交
2. config.yaml 临时 overwrite: true
3. 生成(核对 Overwritten 清单)
4. git diff 审查合并手工改动
5. go build + 重启 + 冒烟Q:skipTables 是什么
关联表 role_menu/user_role 整表跳过文件生成(无独立模块,关联逻辑归 role/user logic),但菜单/字典/路由副作用照常执行。