欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > gorm使用注意事项

gorm使用注意事项

2025/5/10 10:21:15 来源:https://blog.csdn.net/weixin_39441762/article/details/143690119  浏览:    关键词:gorm使用注意事项

1. 使用updates更新字段为0或""时

在updates更新时,会默认将数值为0、字符串为""等忽略掉,不会更新;比如

db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false, Games: 0, Friend: ""})

时,Games和Friend更新均会失败。此时需要使用update的方式进行更新:

db.Model(&user).Update("games", 0).Update("friend", "")

这里需要注意的是,上述提交中写了2次Update就会有2次提交,一般我们是不会希望这样的;这种情况下可以使用updates的map结构:

db.Model(&user).Updates(map[string]interface{}{"games":  0,"friend": "","name": "hello","age": 18,"active": false
})

2. 指定字段实现自增

在使用开源项目netplay-lobby-server时,发现启动的服务中的session表对应的roomId总是为0,检查代码逻辑:RoomID设置了AUTO_INCREMENT
在这里插入图片描述
检查数据库中session表时发现RoomID字段没有对应的字段AUTO_INCREMENT
在这里插入图片描述
排查后发现问题出现在id设置了primary_key之后,需要对roomId做区分;于是重新设置了表结构

type Session struct {ID                  string     `json:"-" gorm:"primary_key;size:64"`ContentHash         string     `json:"-" gorm:"size:64"`RoomID              int32      `json:"room_id" gorm:"autoIncrement;uniqueIndex:idx_room_id"`Username            string     `json:"username"`Country             string     `json:"country" gorm:"size:2"`...
}

再次创建表后,RoomID的设置可以了:
在这里插入图片描述

小结

在GORM中,AUTO_INCREMENT通常用于整数字段,并且该字段应该是主键或者有唯一索引。当设置的表中已经存在ID字段作为主键时,需要设置其他字段 AUTO_INCREMENT时,可以通过如下设置

gorm:"autoIncrement;uniqueIndex:idx_x"

达到效果。

3. update时在某个字段上累加

1)更新total字段:在total原有基础上累加

# 方式1
db.Model(&user).Update("total", gorm.Expr("total+ ?", 1))
# 方式2
db.Model(&user).Updates(map[string]interface{}{"total": gorm.Expr("total+ ?", 1)
})

2)更新total字段:在其他字段基础上增加

# 方式1
db.Model(&user).Update("total", gorm.Expr("online+ ?", 1))
# 方式2
db.Model(&user).Updates(map[string]interface{}{"total": gorm.Expr("online+ ?", 1)
})

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词