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

使用goqu无法获取响应,查询正确且已连库但返回空

问题分析与解决
  • 核心问题:你调用的ToSQL()方法只负责生成SQL语句和对应的参数,根本没有执行数据库查询!所以你遍历的res只是参数列表,不是实际的查询结果,自然拿不到数据。

  • 修正方案:

    1. 让CourseRepo持有数据库连接实例(goqu的DB对象或原生sql.DB都可以,推荐用goqu封装好的DB)
    2. 使用goqu提供的查询执行方法(比如Scan)直接把结果映射到你的courses切片
    3. 完善错误处理,出错时及时返回,避免后续无效执行

修正后的代码示例

// 先给CourseRepo添加db字段,用于持有数据库连接
type CourseRepo struct {
    db *goqu.DB
}

// 初始化Repo时传入已连接好的goqu.DB
func NewCourseRepo(db *goqu.DB) *CourseRepo {
    return &CourseRepo{db: db}
}

func goquBuilder() goqu.DialectWrapper {
    return goqu.Dialect("postgres")
}

func (r *CourseRepo) GetAll() ([]Course, error) {
    var courses []Course

    // 直接用repo的db对象执行查询,自动把结果扫描到courses切片
    err := r.db.From(goqu.S(schema).Table("courses")).Scan(&courses)
    if err != nil {
        clogger.Error(err)
        return nil, err // 出错时立刻返回错误,不要继续往下走
    }

    // 如果需要查看生成的SQL,单独调用ToSQL即可
    sqlStr, args, _ := r.db.From(goqu.S(schema).Table("courses")).ToSQL()
    fmt.Println("生成的SQL:", sqlStr)
    fmt.Println("SQL参数:", args)

    return courses, nil
}

如果你想用原生sql.DB执行的替代方案

如果你的Repo持有的是原生sql.DB,也可以用生成的SQL和参数手动执行:

func (r *CourseRepo) GetAll() ([]Course, error) {
    var courses []Course

    query, args, err := goquBuilder().From(goqu.S(schema).Table("courses")).ToSQL()
    if err != nil {
        clogger.Error(err)
        return nil, err
    }

    rows, err := r.db.Query(query, args...)
    if err != nil {
        clogger.Error(err)
        return nil, err
    }
    defer rows.Close()

    // 手动遍历结果并扫描到结构体
    for rows.Next() {
        var course Course
        // 注意:这里要按Course结构体的字段顺序填写扫描目标
        if err := rows.Scan(&course.ID, &course.Name, &course.Description); err != nil {
            clogger.Error(err)
            return nil, err
        }
        courses = append(courses, course)
    }
    // 检查遍历过程中是否出现错误
    if err := rows.Err(); err != nil {
        return nil, err
    }

    fmt.Println("执行的SQL:", query)
    return courses, nil
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:53:17