Gorm散知识点小结--标签名
在 GORM 中,当结构体字段没有通过 gorm:"column:xxx" 标签(即你提到的 column 配置)显式指定数据库列名时,字段名的大小写会按照 GORM 默认的映射规则转换为数据库列名,具体规则如下:
1. 结构体字段名 -> 数据库列名的默认转换规则
GORM 会将结构体的驼峰式命名(CamelCase)字段自动转换为数据库的蛇形命名(snake_case)列名,与字段本身的大小写无关,只关注命名格式。
例如:
type User struct {ID       int    // 转换为列名:idUserName string // 转换为列名:user_nameEmail    string // 转换为列名:emailage      int    // 小写开头的字段,GORM 会忽略(见下面说明)
}
- 大写开头的字段(如 ID、UserName):会被 GORM 识别,并按驼峰转蛇形规则映射列名。
- 小写开头的字段(如 age):GORM 会默认忽略(视为非数据库字段),不会映射到数据库列。
2. 关键注意点
- 字段可见性:GORM 只处理结构体中首字母大写的字段(公共字段),首字母小写的字段(私有字段)会被忽略,无论是否有 column标签。
- 大小写不影响转换逻辑:只要字段首字母大写,无论中间字母是大写还是小写(如 UserName、UserName),都会统一转换为蛇形小写(user_name)。
- 特殊字段名:如果字段名是 ID,GORM 会默认将其视为主键(PRIMARY KEY),列名映射为id。
3. 示例说明
type Product struct {ProductID  int     // 映射列名:product_idPrice      float64 // 映射列名:priceStockCount int     // 映射列名:stock_countsku        string  // 首字母小写,GORM 忽略,不生成列
}
对应的数据库表结构中,列名会是 product_id、price、stock_count(sku 不会被创建)。
总结
- 若要让字段映射到数据库,必须首字母大写(保证可见性)。
- 未指定 column标签时,GORM 自动将驼峰式字段名转为蛇形列名(全小写,单词间下划线分隔)。
- 首字母小写的字段会被 GORM 忽略,不会参与数据库交互。
