go之nil不会将数据库记录设置为NULL
freeliver54
阅读:206
2025-06-02 22:19:02
评论:0
我正在使用gorm,但我有一个可为空的列gender,可以将其设置为male或female,但是一旦将该列设置为NULL或nil的值,就无法使用male将其设置回female。
以下是我的代码。为简化起见,我只包含与我的问题相关的字段
type User struct {
gorm.Model
Username string `gorm:"type:varchar(40);unique" json:"username"`
NickName string `gorm:"type:varchar(32)" json:"nickname"`
Gender *string `gorm:"type:enum('male', 'female');default:null" json:"gender"`
}
然后将性别更新为男性:
db.Model(&User{}).Where(&User{
Model: gorm.Model{ID: 1},
}).Update(
&User{
Gender: utils.GetStringPtr("female"),
NickName: "nick name",
},
)
然后我尝试将性别更新为NULL
db.Model(&User{}).Where(&User{
Model: gorm.Model{ID: 1},
}).Update(
&User{
Gender: nil,
NickName: "nick name",
},
)
但是,性别保持不变
female,并且是
而不是更改为
NULL。
有什么想法我可以解决这个问题吗?
请您参考如下方法:
您必须使用 null package 。
例如 :
type User struct {
gorm.Model
Username string `gorm:"type:varchar(40);unique" json:"username"`
NickName string `gorm:"type:varchar(32)" json:"nickname"`
Gender null.String `gorm:"type:enum('male', 'female');default:null" json:"gender"`
}
然后将set元素设置为null,您必须这样做:
gender := null.StringFromPtr(nil)
从您的代码,您必须执行以下操作:
db.Model(&User{}).Where(&User{
Model: gorm.Model{ID: 1},
}).Update(
&User{
Gender: null.StringFromPtr(nil),
NickName: "nick name",
},
)
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



