当我在使用Go语言开发时,使用MySQL数据库,gorm框架,遇到了一些小坑,在这里给自己一个记录,也给各位道友普及一下我掉过的坑,有类似的可以借鉴一下。
在使用gorm时,会有这样的需求:
我想要存储数据,这条数据如果在数据库中存在,就做更新操作;如果不存在就做插入操作。
而gorm就提供了很好的封装——Save方法。
我们来看看官方文档怎么说这个Save的:
1.4.1. 更新全部字段
Save将包括执行更新SQL时的所有字段,即使它没有更改
直接说一个拓展的应用吧,基础应用就照猫画虎即可。
应用场景:用户的关注其他用户功能。单独维护一张关注表,可用来查找是否互相关注。
不论是关注者ID还是被关注者ID都不适合做主键,因为一个用户可被多个用户关注,一个用户可关注多个其他用户。
于是定义结构:
type UserFollow struct {
ID int64 `json:"id" gorm:"primary_key"`
AccountID int64 `json:"account_id"` //被关注者ID
FollowerID int64 `json:"follower_id"` //关注者ID
Status STATUS `json:"status" gorm:"default:1"` //是否有效
}
写入数据库代码:
f := new(UserFollow )
f.AccountID = 1
f