gorm笔记
博客专区 > 吾爱 的博客 > 博客详情
gorm笔记
吾爱 发表于3个月前
gorm笔记
  • 发表于 3个月前
  • 阅读 16
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

感觉gorm文档还是太简单了,一些坑需要自己踩到再看源码才知道。

错误处理

不管什么操作,不要使用原始的DB对象获取错误,因为操作内部实际上是生成了一个新的DB对象并返回。

下面的用法是错误的:

var DB *gorm.DB
//.....
DB.Create(&user)
if DB.Error != nil {
    panic(DB.Error)
}

正确的方法:

var DB *gorm.DB
//.....

if newdb := DB.Create(&user);newdb.Error != nil {
    panic(newdb.Error)
}

除了Create,其他方法也一样的处理方式,可以简化一些:

if err := DB.Create(&user).Error;err != nil {
    panic(err)
}

对于查询操作,找不到结果也是一种错误,所以需要判断一下

if d := DB.First(&user);d.Error != nil {
    if false == d.RecordNotFound() {
        panic(d.Error)
    }
}

链式调用

基本上每个链式方法如:Where,Find,Limit等,都会返回一个新的DB对象,所以拆开调用的时候一定要注意替换原对象指针,举个例子:

user := User{}
model := db.Model(&user)
if typeName := c.DefaultQuery("type_name","");typeName != "" {
    model.Where("type_name = ?",typeName)
}
model.Find(&user)

这样写,where条件是没有用的,因为where方法会克隆出一个新的对象,正确的写法:

user := User{}
model := db.Model(&user)
if typeName := c.DefaultQuery("type_name","");typeName != "" {
    model = model.Where("type_name = ?",typeName)
}
model.Find(&user)
标签: Go
共有 人打赏支持
粉丝 141
博文 253
码字总数 87728
×
吾爱
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: