2 回答
TA贡献1847条经验 获得超11个赞
Godefer正是为此目的而引入的。
rows := db.MyPgConn.QueryRows(`SELECT * FROM bla`) // or any other query
defer rows.Close()
for rows.Next() { // if there are result
// rows.Scan(
// do custom operation
}
从文档:
推迟对诸如此类的函数的调用Close有两个优点。首先,它保证您永远不会忘记关闭文件,如果您稍后编辑该函数以添加新的返回路径,则很容易犯这个错误。其次,这意味着收盘价位于开盘价附近,这比将其放在函数的末尾要清晰得多。
TA贡献1789条经验 获得超8个赞
正如 Internet 所提到的, defer 语句是使 close 语句更接近行 var 声明位置的最佳方式。我能想到的唯一方法是在您的数据库调用周围创建一个包装函数。
func performQuery(q string, op func(db.rows)) {
rows := db.MyPg.Conn.QueryRows(q)
// defer rows.Close()
op(rows)
rows.Close()
}
// then we could do:
performQuery(`SELECT * FROM bla`,func(rows db.Rows) {
for rows.Next() {
// rows.Scan(
}
})
但是,这会限制您使用参数进行查询(例如SELECT * FROM tableName WHERE id = $1.
- 2 回答
- 0 关注
- 154 浏览
添加回答
举报