如何在 GORM 中将 Go 结构体字段映射到含下划线的 MySQL 列名
发布时间 - 2026-01-21 00:00:00 点击率:次gorm 默认使用蛇形命名(snake_case)自动映射结构体字段到数据库列,但当结构体字段名与实际数据库列名不一致(如数据库列为 spe_name,而字段为 spename)时,需通过 `gorm:"column:xxx"` 标签显式指定列名映射。
在使用 GORM(尤其是 v1.x 版本)开发时,若数据库表中存在带下划线的字段名(例如 spe_Name、parent_id),而 Go 结构体采用驼峰命名(如 SpeName、ParentId),GORM 不会自动将 SpeName 映射到 spe_Name

✅ 正确做法是使用 GORM 的结构体标签 gorm:"column:实际列名" 显式声明映射关系:
type Specialties struct {
SpeId int64 `gorm:"column:spe_Id"` // 映射到数据库列 spe_Id
SpeName string `gorm:"column:spe_Name"` // 关键:明确指向 spe_Name
Conditions sql.NullString `gorm:"column:conditions"`
ParentId sql.NullInt64 `gorm:"column:parent_id"` // 若数据库实际为 parent_id,此处也需对应
Hidden sql.NullInt64 `gorm:"column:hidden"`
// 注意:GORM 要求主键字段需显式标记或符合约定(如 ID 或 XxxId)
// 若 spe_Id 是主键,建议补充 `gorm:"primaryKey"`
}? 补充说明与最佳实践:
-
主键识别:若 spe_Id 是主键,强烈建议添加 gorm:"primaryKey" 标签,避免 GORM 推断失败:
SpeId int64 `gorm:"column:spe_Id;primaryKey"`
零值安全:sql.NullString 和 sql.NullInt64 已正确处理 NULL,但确保数据库该列允许 NULL;否则应改用非空类型(如 string, int64)并配合 gorm:"default:0" 等约束。
-
调试技巧:启用 GORM 日志快速验证 SQL 是否按预期执行:
db.LogMode(true) // v1.x;v2 使用 db.Debug()
全局命名策略(可选):若整个项目均使用大小写敏感的蛇形列名(如 spe_Name),可通过自定义 naming_strategy 配置统一处理(GORM v2 支持更强),但显式 column: 标签仍是最清晰、最可控的方式。
最后,请确认你的 Specialties 变量(在 IsFolderNameASpecialty 函数中遍历的)确实已通过 GORM 查询(如 db.Find(&Specialties))从数据库加载了真实数据——结构体标签仅解决映射问题,不解决数据未加载的问题。
# mysql
# go
# sql
# String
# NULL
# 结构体
# 空类型
# default
# column
# 数据库
# 主键
# 字段名
# 加载
# 尤其是
# 遍历
# 下划线
# 仍是
# 自定义
# 可选
# 而非
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
Laravel如何处理CORS跨域请求?(配置示例)
zabbix利用python脚本发送报警邮件的方法
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
原生JS获取元素集合的子元素宽度实例
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
详解MySQL数据库的安装与密码配置
浅谈Javascript中的Label语句
JS中对数组元素进行增删改移的方法总结
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel如何实现API版本控制_Laravel版本化API设计方案
JavaScript如何实现继承_有哪些常用方法
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
成都网站制作公司哪家好,四川省职工服务网是做什么用?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
深圳网站制作平台,深圳市做网站好的公司有哪些?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何在万网主机上快速搭建网站?
JavaScript中的标签模板是什么_它如何扩展字符串功能
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
深圳网站制作培训,深圳哪些招聘网站比较好?
EditPlus中的正则表达式 实战(4)
iOS UIView常见属性方法小结
简单实现Android验证码
如何在云主机上快速搭建多站点网站?
JavaScript Ajax实现异步通信
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何在Ubuntu系统下快速搭建WordPress个人网站?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
,在苏州找工作,上哪个网站比较好?
javascript基于原型链的继承及call和apply函数用法分析
如何撰写建站申请书?关键要点有哪些?
北京的网站制作公司有哪些,哪个视频网站最好?
Android 常见的图片加载框架详细介绍
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Linux后台任务运行方法_nohup与&使用技巧【技巧】
php 三元运算符实例详细介绍
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
微信小程序 wx.uploadFile无法上传解决办法
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
b2c电商网站制作流程,b2c水平综合的电商平台?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口

