go之nil不会将数据库记录设置为NULL

freeliver54 阅读:206 2025-06-02 22:19:02 评论:0

我正在使用gorm,但我有一个可为空的列gender,可以将其设置为malefemale,但是一旦将该列设置为NULLnil的值,就无法使用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.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号