全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-21 7 分钟 ✍️ juanwangdev

模型定义基础

GORM 通过 Go 结构体映射数据库表,下面介绍模型定义的核心用法。

基础模型

GORM 偏好约定优于配置,结构体默认映射同名复数表。

Go
type User struct {
    ID        uint      `gorm:"primaryKey"`
    Name      string    `gorm:"type:varchar(100);not null"`
    Email     string    `gorm:"type:varchar(100);uniqueIndex"`
    Age       int
    CreatedAt time.Time
    UpdatedAt time.Time
}

默认映射规则:

  • 结构体 User → 表名 users
  • 字段 IDId → 自动设为主键
  • 字段 CreatedAtUpdatedAt → 自动管理时间戳
  • 字段名驼峰 → 列名下划线(CreatedAtcreated_at

gorm.Model 嵌入

gorm.Model 是预定义结构体,包含 IDCreatedAtUpdatedAtDeletedAt 四个字段:

Go
type Model struct {
    ID        uint `gorm:"primaryKey"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt gorm.DeletedAt `gorm:"index"`
}

使用嵌入语法简化模型定义:

Go
type User struct {
    gorm.Model
    Name  string `gorm:"type:varchar(100);not null"`
    Email string `gorm:"type:varchar(100);uniqueIndex"`
    Age   int
}

嵌入 gorm.Model 后自动获得软删除能力(DeletedAt 字段),调用 db.Delete(&user) 时不会物理删除,而是更新 deleted_at 时间戳。

常用标签

gorm 标签控制列属性:

标签说明
primaryKey设为主键
autoIncrement自增
type:xxx指定列类型
not null非空约束
uniqueIndex唯一索引
default:xxx默认值
column:xxx自定义列名

示例:

Go
type Product struct {
    gorm.Model
    Code      string  `gorm:"type:varchar(50);uniqueIndex"`
    Price     float64 `gorm:"type:decimal(10,2);not null"`
    Status    int     `gorm:"default:1;comment:1=上架 0=下架"`
}

要点总结

  • 结构体默认映射复数表名,驼峰字段自动转下划线列名
  • gorm.Model 嵌入提供 IDCreatedAtUpdatedAtDeletedAt
  • 嵌入 gorm.Model 自动支持软删除
  • 使用 gorm 标签配置列类型、约束、索引
  • 偏好约定可减少标签书写,保持模型简洁

存放路径:D:\git2\jwdev\articles\GORM\入门\GORM 基础概念\模型定义基础.md

📝 发现内容有误?点击此处直接编辑

← 上一篇 数据库连接与配置
下一篇 → GORM 创建记录
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库