我刚刚开始学习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
时,它停止获取行,我想我在这里错过了一些事情。
答案 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
}
这就是为什么您无法读取数据