DDL生成器不遵循GoLand代码样式设置,其字段名大小写由Groovy模板控制;需手动修改模板将column.getColumnName()替换为小写转snake_case逻辑,并确保输出目标正确、插件启用。

DDL生成器不读取GoLand代码样式设置
DDL生成器(SQL Generator)输出的字段名大小写、下划线风格,和你在 Settings → Editor → Code Style → Go 里配的命名规则完全无关。它走的是独立路径,靠的是 SQL 模板脚本控制,不是 IDE 的通用代码格式化引擎。
常见错误现象:你把 Go 结构体字段设成 Name string `json:"name"`,再用 DDL 生成器导出表结构,结果得到 NAME VARCHAR 或 Name VARCHAR,而不是预期的 name VARCHAR。
- DDL 生成器默认使用内置 Groovy 脚本,字段名直接取自数据库元数据(如 PostgreSQL 的
column_name),不经过 GoLand 的 snake_case 转换逻辑 - 即使你在
Settings → Go → Code Generation → Struct tags勾了Use snake_case for JSON, XML, and YAML tags,这个开关对 DDL 生成器无效 - 想让 DDL 输出小写带下划线字段,必须修改或替换 SQL Generator 使用的 Groovy 脚本
如何定位并修改DDL生成器的Groovy模板
GoLand 的 DDL 生成器底层调用一个 Groovy 脚本,路径藏得比较深,但可编辑:
打开 SQL Generator 窗口(Ctrl+G),点击右上角 File Output Options 图标 → Settings → Edit,就能看到当前生效的 Groovy 脚本内容。
关键点在于字段名处理逻辑,通常在类似 column.name 或 column.getColumnName() 的地方。你需要把它替换成小写转 snake_case 的调用,例如:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
column.getColumnName().toLowerCase().replaceAll('([a-z])([A-Z])', '$1_$2')
- 别直接改内置脚本——它可能随版本更新被覆盖;点击
Duplicate创建副本,重命名后启用 - 如果字段来自 Go struct(比如通过 DDL data source 反向建模),注意:DDL data source 本身不解析 Go tag,只认 SQL 文件里的
CREATE TABLE定义,所以要先确保 SQL 文件里字段名已是user_id这种形式 - 修改后务必测试:选中一张表 →
Ctrl+G→ 看预览输出是否符合预期,避免批量导出时出错
DDL data source + mapping 场景下的字段名源头在哪
如果你是用 CREATE TABLE user_info (ID INT, Full_Name TEXT) 这类 SQL 文件构建 DDL data source,那字段名就完全取决于 SQL 文件本身——GoLand 不会自动帮你转小写或加下划线。
容易被忽略的关键点:
- DDL data source 是“只读视图”,它不推导语义,只按字面解析 SQL;
ID就是ID,不会变成id - 当执行
DDL Mapping → Apply to PostgreSQL把 SQL 表同步到真实数据库时,PostgreSQL 实际创建的列名就是 SQL 文件里写的那个,大小写敏感与否取决于引号("Full_Name"保留大小写,Full_Name自动转小写) - 若想统一源头,建议用脚本预处理 SQL 文件:把所有大驼峰字段名批量转成
snake_case,再导入为 DDL data source
为什么改了模板还是没生效
最常踩的坑是没选对输出目标或没刷新缓存:
- 确认你在
SQL Generator窗口里点击的是File per object with order或Single file,而不是Clipboard—— 后者不走 Groovy 脚本 - 修改 Groovy 脚本后,关闭再重开
SQL Generator窗口,否则旧缓存可能还在用 - 如果用了 DDL mapping,且映射关系已存在,新模板只影响后续生成,不会自动重刷已有 SQL 文件
- 检查
Database Tools and SQL插件是否启用(Ctrl+Alt+S → Plugins),禁用会导致 DDL 相关功能灰掉
真正起作用的永远是 SQL 文件内容或 Groovy 脚本输出,不是 Go 结构体字段名或 JSON tag。别在 GoLand 的 Go 代码生成设置里找 DDL 字段策略——它们压根不在一个管道里。










