在 Go 中关闭数据库连接的更好/更短的方法

Kok*_*zzu 1 database go

通常我写这样的东西

rows := db.MyPgConn.QueryRows(`SELECT * FROM bla`) // or any other query
for rows.Next() { // if there are result
   // rows.Scan( 
   // do custom operation
}
rows.Close() // close recordset
Run Code Online (Sandbox Code Playgroud)

但是那样的话,我有可能忘记写rows.Close()这样的代码,这可能会使可用连接/套接字的数量耗尽,有没有更好的方法来做到这一点?

Sim*_*tti 6

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
}
Run Code Online (Sandbox Code Playgroud)

从文档:

推迟对诸如此类的函数的调用Close有两个优点。首先,它保证您永远不会忘记关闭文件,如果您稍后编辑该函数以添加新的返回路径,则很容易犯这个错误。其次,这意味着收盘价位于开盘价附近,这比将其放在函数的末尾要清晰得多。