10.4 表结构解析引擎
概述
解析引擎负责把数据库表翻译为生成元数据:表注释(MySQL information_schema / 非 MySQL 降级)、字段类型映射、注释智能解析(枚举/标签/图片/富文本识别)、字段分桶(列表/表单/筛选)。
元数据来源
text
MySQL:查 information_schema.TABLES
(表注释/引擎/行数/自增/排序规则/创建时间)
非 MySQL:gdb 元数据降级(仅表名,注释留空,模块名回退表名)
字段元数据:g.DB().TableFields(tableName)
按元数据 Index 还原物理列序生成建议
非 MySQL 库内省不到注释与枚举——建议在 MySQL 上生成,或生成后人工补注释再重新生成。
类型映射(buildField,正则按 MySQL 类型串推断)
text
tinyint(1) → BooleanField
int 族 → IntegerField
decimal/numeric → DecimalField
float/double → FloatField
date → DateField
datetime/timestamp → DateTimeField
blob/binary → BinaryField
text 族 → TextField
varchar/char/enum → CharField
Go 类型:bigint→int64;decimal/float→float64;时间列→*gtime.Time;
int 族→int;其余 string
行取值方法:.Int() / .Float64() / .String()注释智能解析
text
枚举:"状态:1-正常 2-禁用"(reChoice 支持 - — - = 分隔)
→ Choices 集合,标签类型 1→success 2→danger 3→warning 其余 info
表单标签:cleanLabel 去掉枚举尾巴保留中文名("状态")
图片字段:注释含 图片/头像/封面
或列名含 avatar/cover/image/icon/photo
富文本: 注释含 富文本
或 TextField 且列名含 content/body/editor图片/富文本识别驱动 FileFields/ContentFields 声明与前端组件选型。
字段分桶(buildVars)
text
审计列排除:
id 进列表(树形/分页需要 Id)
create_user/create_time 仅标记 HasCreateUser/HasCreateTime
update_user/update_time/del_flag/tenant_id 不进前后端字段
salt 不进表单
列表字段:排除富文本/password/salt/BinaryField
表单字段:全部业务列(BinaryField 除外)
筛选字段:CharField 非图片非 URL 列(website/site/url/link 不作模糊条件);
带枚举的 Integer/Boolean → Select;*_id 外键 Integer → InputNumber
显示字段(模糊搜索列)优先级:
name/title/label/username/realname/nickname/category_name/
job_name/dept_name/role_name/position_name/level_name
未命中取列表首列命名推导
text
moduleName = 表名去 goframe_ 前缀(config_item)
Pascal = 结构体类名(ConfigItem)
camelLower = 前端模块名(configItem)
权限前缀 = sys:{camelLower}(sys:configItem)
路由前缀 = moduleName(snake)
域归属 = genDomainMap(未匹配默认 tool)
模板类型 = 有 parent_id/pid 列 → ui2 树形,否则 ui 普通建表侧的配合
解析质量取决于建表规范:
text
1. 列注释按枚举规范写("状态:1-正常 2-禁用")→ 字典自动创建
2. 图片列注释含"图片"或用 avatar/cover 等列名 → FileFields 识别
3. 富文本列用 content 列名或注释"富文本" → ContentFields 识别
4. 索引 uk_* 规范命名 → 唯一性语义清晰
5. 审计列齐全(解析器自动排除)