全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-21 6 分钟 ✍️ juanwangdev

命名约定与映射规则

GORM 默认使用蛇形命名(snake_case)规则将 Go 结构体映射到数据库表和列。

默认命名规则

表名映射

GORM 将结构体名转为蛇形命名并加复数后缀作为表名:

Go
type User struct{}      // -> users
type UserProfile struct{} // -> user_profiles
type Order struct{}     // -> orders

列名映射

GORM 将字段名转为蛇形命名作为列名:

Go
type User struct {
    ID        uint      // -> id
    UserName  string    // -> user_name
    CreatedAt time.Time // -> created_at
    IsVIP     bool      // -> is_vip
}

自定义表名

实现 TableName() 方法自定义表名:

Go
type User struct {
    ID   uint
    Name string
}

// 自定义表名
func (User) TableName() string {
    return "t_user"
}

自定义列名

使用 column 标签自定义列名:

Go
type User struct {
    ID        uint   `gorm:"column:uid"`
    UserName  string `gorm:"column:u_name"`
    CreatedAt time.Time `gorm:"column:create_time"`
}

关闭复数表名

Go
// 禁用表名复数化
db.NamingStrategy = schema.NamingStrategy{
    TablePrefix:   "",
    SingularTable: true, // 单数模式
}

type User struct{} // -> user(而非 users)

命名策略配置

Go
db.NamingStrategy = schema.NamingStrategy{
    TablePrefix:   "t_",     // 表前缀
    SingularTable: true,     // 单数表名
    NoLowerCase:   false,    // 是否关闭蛇形命名
}

映射规则速查

Go 结构体默认表名默认列名规则
Userusersid
UserProfileuser_profilesuser_id, user_name
Orderordersorder_no
Productproductsproduct_name

注意事项

  • GORM 默认使用蛇形命名 + 复数表名
  • 可通过 TableName() 方法完全覆盖表名
  • column 标签优先级高于默认规则
  • NamingStrategy 支持全局配置命名行为

要点总结

配置项默认行为自定义方式
表名蛇形 + 复数TableName() 方法
列名蛇形column 标签
全局规则NamingStrategydb.NamingStrategy 配置

存放路径:D:\git2\jwdev\articles\GORM\入门\模型标签与字段配置\命名约定与映射规则.md

想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 索引标签配置
下一篇 → AutoMigrate 使用
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码