golang 数据库操作后关闭的正确姿势?

这是一个问题帖,直接举例子
如果有两条sql语句要执行

rows, err := db.Query("SELECT id, user_id, msg_send, add_time, order_id, pay, expo_id FROM `tp_order` WHERE status = 6")
if err != nil {
    DebugLog.Println("GET ORDER DATA ERR", err)
}
defer rows.Close()  
for rows.Next() {
    ...
}
rows, err = db.Query("SELECT xxx FROM xxx WHERE xxx")
if err != nil {
    DebugLog.Println("GET ORDER DATA ERR", err)
}
for rows.Next() {
    ...
}

如上示例,rows先后被两次赋值
这样调用 defer rows.Close()
会不会导致泄露?

阅读 4.9k
2 个回答

rows.next() 都把数据全部next 完是会自动关闭,如果没有那么就会出现 资源没有回收,但超时后也会被回收,只是没有那么及时。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题