全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 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 创建记录
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码