Skip to content
鼓励作者:欢迎打赏犒劳

gorm真实项目开发

AI提示词:我给你一个sql建表语句,你给我生成一份go的DO代码和Dao层的代码。支持json解析和gorm

我们都知道 gorm就是个orm的框架,那么它是如何和表给映射的呢?

比如,表名字叫 users , 对应的结构体 就是 user, 这是因为 GORM 的默认命名约定导致的。

  • 实体类名(结构体名) 采用帕斯卡命名法(首字母大写,如 UserArticle),符合 Go 的结构体命名规范。
  • 表名默认是实体类名的复数形式(且全小写),这是因为数据库表名通常用复数表示“多条记录的集合”(如 users 表示多个用户,articles 表示多篇文章)。

GORM 的表名转换规则:

  1. 将结构体名(如 User)转为小写(user)。
  2. 自动添加复数后缀(userusers)。

如果我们不想这样怎么办?

  1. 通过结构体标签 gorm:"tableName" 指定
go
type User struct {
   gorm.Model
   Name  string
} `gorm:"tableName:t_user"` // 表名强制设为 t_user
  1. 实现 Tabler 接口(推荐)
    GORM v2 及以上支持通过接口自定义表名,更灵活:
go
package model

type User struct {
	ID        int64  `gorm:"column:id;primaryKey"`
	Name      string `gorm:"column:name"`
	Email     string `gorm:"column:email;uniqueIndex"`
	Age       int    `gorm:"column:age"`
	CreatedAt string `gorm:"column:created_at"`
	UpdatedAt string `gorm:"column:updated_at"`
}

// 实现 Tabler 接口,返回自定义表名
func (User) TableName() string {
	return "t_user"
}

如有转载或 CV 的请标注本站原文地址