定义字段默认值
在 Gorm 框架中,可以使用标签(Tag)default 来指定字段的默认值,例如:
type User struct {
ID int64
Name string `gorm:"default:galeone"`
Age int64 `gorm:"default:18"`
}
调用 db.Create 时,如果某字段是零值(Zero-value),Gorm 会使用字段中定义的 default 值进行缺省填充(构造 SQL)。
请注意:零值包括数字 0、空字符串 "",布尔值 false。
零值陷阱
定义了 default 值的字段,db.Create 时,零值不会被写入到 db 中(这种情况会使用 default 值)。为了避免这种情况,可以使用指针(pointer)或 Scanner/Valuer ,例如:
type User struct {
gorm.Model
Name string Age *int(这是一个指针类型) `gorm:"default:18"`
Active sql.NullBool `gorm:"default:true"`
}
迁移时忽略 default 设置
对于在 db 中已经有了 default 值或设置了 virtual/generated value 的字段,你必须设置 default 标签。如果你想在 migrating 时跳过 default 值定义,你可以使用 default:(-),例如:
type User struct {
ID string `gorm:"default:uuid_generate_v3()"` // db func FirstName string LastName string
Age uint8 FullName string `gorm:"->;type:GENERATED ALWAYS AS (concat(firstname,' ',lastname));default:(-);"`
}
当使用 virtual/generated value 时,你也许需要禁止字段的 creating/updating、check out Field-Level 权限。