如何从函数返回ref var

时间:2018-12-05 05:50:59

标签: database go row ref

我刚刚开始学习Go,并且从函数返回ref vars遇到了问题

我有一个从数据库表中获取行的功能:

func getData(query string, db *sql.DB) *sql.Rows {
    rows, err := db.Query(query)
    if err != nil {
        fmt.Println("SQL select error: ")
        log.Fatal(err)
    }
    defer rows.Close()

    return rows
}

现在我尝试从数据库获取数据

rows := getData("select * from all_obrash", db)
fmt.Println(rows)

我希望它只返回*sql.Rows,但我什么也没得到

&{0xc00025e100 0x4cf270 0xc0002743c0 <nil> 0xc000248180 {{0 0} 0 0 0 0} true <nil> []}

当我从main()调用时,它工作正常,但是当我将代码移至func时,它停止获取行,我想我在这里错过了一些事情。

1 个答案:

答案 0 :(得分:3)

推迟行。函数返回时执行Close()

  func getData(query string, db *sql.DB) *sql.Rows {
    rows, err := db.Query(query)
    if err != nil {
        fmt.Println("SQL select error: ")
        log.Fatal(err)
    }
    defer rows.Close()

    return rows
}

这就是为什么您无法读取数据