gorm写入零值问题
作者:matrix 被围观: 128 次 发布时间:2024-10-21 分类:Golang | 无评论 »
gorm中如果数据为结构体类型的零值时,不会触发零值更新。
比如当前有表结构体
type OrderTemplate struct {
ID int `gorm:"primaryKey;autoIncrement;column:id" json:"id"`
InputType int `gorm:"not null;default:1;column:input_type" json:"input_type"`
}
注意:
InputType类型为 int,设置了default为 1
当数据传入 0
,是 int 类型的默认零值0
,会认为你没有传入所以就用default值去填充。如果这里不配置default,系统也就不会写入数据。
解决方案
结构体字段使用非int
类型,如 sql.NullInt64
,*int
指针
简单点建议直接使用指针类型。使用sql.NullInt64类型传入时需要注意设置Valid为 true
sql.NullInt64{
Int64: 传入值,
Valid: true, // 表示这个传入值有效,即使它是 0
}
Valid: false 表示传入值无效,即写入默认 Null。
查询或者更新数据的时候也同样会遇到零值问题。
参考:
https://juejin.cn/post/7354940230301483017