快速指南: 通过结构体变量更新字段值, gorm 库会忽略零值字段。就是字段值等于 0, nil, “”, false 这些值会被忽略掉,不会更新。如果想更新零值,可以使用 map 类型替代结构体。
一、问题
我们都知道,使用 golang 定义一个变量并且不赋初始值时,初始值就默认为 0 值,比如 0, nil, “”, false 等。
在使用 gorm 包进行数据库操作时,如果想要进行字段的更新,只需要将要变动的字段进行修改,然后执行 db.Updates() 操作即可。
假定有如下结构体定义:
type User struct {
ID int `gorm:"primary_key;column:id"`
Name string `gorm:"column:name"`
Score int `gorm:"column:score"`
}
现需要将 score 字段由 100 改为 0 时,我们正常的想法是把对应的字段改为 0 值,然后执行 db.Updates() 就好。例如:
func SetUserScoreZero(user *User,id int) error {
...
user.Score = 0
if err := db.Table("xxx").Where("id = ?", id).Updates(user).Error; err != nil {
return err
}
return nil
}
但是会发现更新不生效,因为将 user.Score 设置为 0 值后;就像不重新赋值 Name ,Name 为 “” 一样,gorm 就不会对其进行修改。
二、解决
如果想更新零值,可以使用 map 类型替代结构体。
代码实现如下:
import (
.

1万+

被折叠的 条评论
为什么被折叠?



