# 10.9 常见问题 :::tip 概述 生成器 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 太多想全部重新生成 ```text 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),但菜单/字典/路由副作用照常执行。