当前位置:首页 > Go > 正文

Go语言GORM模型定义详解(手把手教你使用GORM标签进行数据库映射)

在使用 Go 语言开发 Web 应用或后端服务时,我们经常需要与数据库打交道。为了简化数据库操作,开发者通常会使用 ORM(对象关系映射)框架。在 Go 生态中,GORM 是最受欢迎、功能最强大的 ORM 框架之一。

本文将围绕 GORM模型定义GORM标签使用 这两个核心主题,详细讲解如何通过结构体和标签来映射数据库表,帮助初学者快速上手 GORM 的基本用法。

Go语言GORM模型定义详解(手把手教你使用GORM标签进行数据库映射) GORM模型定义 GORM标签使用 Go语言ORM框架 GORM结构体映射 第1张

什么是 GORM?

GORM 是一个功能齐全的 Go 语言 ORM 库,支持 MySQL、PostgreSQL、SQLite、SQL Server 等多种数据库。它允许你通过定义 Go 结构体(struct)来表示数据库表,并通过结构体字段上的标签(tag)控制字段如何映射到数据库列。

1. 定义 GORM 模型

在 GORM 中,模型就是普通的 Go 结构体。为了让 GORM 能识别这个结构体并自动处理数据库交互,你需要嵌入 gorm.Model 或手动定义主键等字段。

方式一:使用 gorm.Model(推荐)

gorm.Model 是一个内置的结构体,包含以下字段:

// gorm.Model 的定义ID        uint           `gorm:"primaryKey"`CreatedAt time.TimeUpdatedAt time.TimeDeletedAt gorm.DeletedAt `gorm:"index"` // 软删除

因此,你可以这样定义用户模型:

package modelimport "gorm.io/gorm"type User struct {    gorm.Model    Name     string `gorm:"size:100;not null"`    Email    string `gorm:"uniqueIndex;not null"`    Age      int    `gorm:"check:age > 0"`    IsActive bool   `gorm:"default:true"`}

方式二:自定义主键

如果你不想使用 gorm.Model,也可以自己定义主键和其他字段:

type Product struct {    ID          uint   `gorm:"primaryKey;autoIncrement"`    Code        string `gorm:"size:50;uniqueIndex"`    Name        string `gorm:"not null"`    Price       float64    CreatedAt   time.Time    UpdatedAt   time.Time}

2. 常用 GORM 标签详解

GORM 使用结构体字段的 gorm 标签来控制数据库映射行为。以下是几个常用的标签选项:

  • column:指定数据库列名,例如 `gorm:"column:user_name"`
  • primaryKey:将字段设为主键
  • uniqueIndex:创建唯一索引
  • size:设置字符串或数字的最大长度,如 size:255
  • not null:禁止为空
  • default:设置默认值
  • autoIncrement:自增主键
  • index:创建普通索引
  • embedded:嵌入结构体(用于组合)
  • -:忽略该字段,不映射到数据库

例如,下面的模型展示了多种标签的组合使用:

type Article struct {    ID        uint      `gorm:"primaryKey"`    Title     string    `gorm:"size:200;not null"`    Content   string    `gorm:"type:text"`    Views     int       `gorm:"default:0"`    AuthorID  uint      `gorm:"index"`    Status    string    `gorm:"default:'draft';check:status IN ('draft', 'published')"`    CreatedAt time.Time    UpdatedAt time.Time    DeletedAt gorm.DeletedAt `gorm:"index"`}

3. 表名自定义

默认情况下,GORM 会将结构体名转换为复数小写作为表名(如 Userusers)。你可以通过实现 TableName() 方法来自定义表名:

func (User) TableName() string {    return "my_users"}

4. 小白常见问题

Q:为什么我的字段没有同步到数据库?
A:请确保字段首字母大写(Go 的导出规则),并且没有使用 gorm:"-" 忽略标签。

Q:如何关闭软删除?
A:不要嵌入 gorm.Model,或手动定义字段时不包含 DeletedAt

总结

通过本文,你应该已经掌握了 Go语言ORM框架 GORM 的基本模型定义方法,以及如何使用 GORM结构体映射 标签来精确控制数据库表结构。合理使用这些标签,可以让你的代码更清晰、数据库设计更规范。

记住,GORM 的强大不仅在于模型定义,还在于其丰富的查询、关联、事务等功能。建议在掌握基础后,继续深入学习官方文档。

SEO关键词回顾:GORM模型定义、GORM标签使用、Go语言ORM框架、GORM结构体映射