标签配置默认值
GORM 支持通过 default 标签为字段设置数据库级别的默认值,在插入记录时自动填充。
什么是 default 标签
default 标签用于在数据库层面定义字段的默认值,当插入数据未提供该字段时,数据库自动使用默认值填充。
基本语法
Go
type Model struct {
Field Type `gorm:"default:value"`
}
使用示例
数值默认值
Go
type Product struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:256"`
Price float64 `gorm:"default:0.00"`
Stock int `gorm:"default:0"`
}
字符串默认值
Go
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:100"`
Role string `gorm:"size:50;default:user"`
Status string `gorm:"size:20;default:active"`
}
时间默认值
Go
type Order struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time `gorm:"default:CURRENT_TIMESTAMP"`
UpdatedAt time.Time `gorm:"default:CURRENT_TIMESTAMP"`
}
布尔默认值
Go
type User struct {
ID uint `gorm:"primaryKey"`
IsActive bool `gorm:"default:true"`
IsVIP bool `gorm:"default:false"`
}
与 Go 默认值的区别
| 方式 | 定义位置 | 生效时机 |
|---|---|---|
| Go 默认值 | 结构体初始化 | 创建对象时 |
| gorm default 标签 | 数据库列定义 | 插入数据时 |
Go
// Go 层面默认值
user := User{Role: "user"}
// 数据库层面默认值(推荐)
type User struct {
Role string `gorm:"default:user"`
}
// 插入时未指定 Role,数据库自动填充 "user"
注意事项
- default 值在数据库层面生效,不依赖 Go 代码
- 使用 SQL 函数(如 CURRENT_TIMESTAMP)时直接用字符串
- 字符串默认值不需要加引号,GORM 会自动处理
- 空字符串 "" 不会触发默认值
要点总结
| 类型 | 示例 |
|---|---|
| 数值 | gorm:"default:0" |
| 字符串 | gorm:"default:user" |
| 时间 | gorm:"default:CURRENT_TIMESTAMP" |
| 布尔 | gorm:"default:true" |
存放路径:D:\git2\jwdev\articles\GORM\入门\模型标签与字段配置\标签配置默认值.md
📝 发现内容有误?点击此处直接编辑