You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang GORM中RowsAffected使用报错,如何解决?

解决GORM中RowsAffected调用错误的问题

错误原因

你犯了两个关键问题:

  1. 错误地将result赋值为GORM链式调用的.Error属性,导致result是error类型——而RowsAffected是GORM*DB实例的属性,error类型根本没有这个字段,因此报错。
  2. 函数返回值定义与实际想要返回的RowsAffected类型不匹配:RowsAffected是int64类型,但你声明的返回值是(*models.ModelUser, error),这会导致额外的编译错误。

修正方案(根据实际需求二选一)

方案一:返回查询到的用户数量(RowsAffected)和错误

如果你的目标是获取模糊匹配的用户总数,调整函数返回值并修正代码:

func (r *repositoryUser) EntityResultAllTotal(search string) (int64, error) {
    cari := "%" + search + "%"
    var users []models.ModelUser
    // 保留GORM的*DB对象,不要直接取.Error
    db := r.db.Where("username LIKE ?", cari).Find(&users)
    if db.Error != nil {
        return 0, db.Error
    }
    return db.RowsAffected, nil
}

注意:原代码用username = ?是错误的,模糊查询必须用LIKE才能匹配带%的通配符。

方案二:返回用户列表和错误(同时可获取行数)

如果你的目标是返回查询到的用户数据,调整返回值并按需使用RowsAffected:

func (r *repositoryUser) EntityResultAllTotal(search string) ([]models.ModelUser, error) {
    cari := "%" + search + "%"
    var users []models.ModelUser
    db := r.db.Where("username LIKE ?", cari).Find(&users)
    if db.Error != nil {
        return nil, db.Error
    }
    // 可在这里用db.RowsAffected做日志或其他逻辑
    // fmt.Println("匹配到的用户数:", db.RowsAffected)
    return users, nil
}

核心要点

GORM的链式调用(Where/Find等)返回的是*gorm.DB对象,这个对象同时包含RowsAffected(受影响行数)和Error(操作错误)属性——必须先保留整个*DB对象,再分别处理错误和获取行数,不能直接把.Error赋值给变量后再调用RowsAffected。

内容的提问来源于stack exchange,提问作者dev gomar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:15:29