当我使用golang的sql包时,如果我在transaction中进行查询,在调用rows.Scan()时遇到错误,那么在这之后我应该首先调用哪个方法呢?*sql.Tx.Rollback()还是*sql.Rows.Close()?目前我在*sql.Tx.Rollback()之前调用*sql.Rows.Close(),但是我想知道,如果我颠倒这个顺序会发生什么?
tx, err := db.Begin()
if err != nil {
... // handle error
}
rows, err := tx.Query("sqlstmt")
if err != nil {
... // handle error
}
defer rows.Close() // can I use defer at this place, though it will be called after tx.Rollback()?
if err := rows.Scan(vars...); err != nil {
if e := tx.Rollback(); e != nil {
log(e)
return e
}
return err
}发布于 2019-04-29 11:41:49
https://go-review.googlesource.com/c/go/+/44812/
代码在这里
即使跳过事务内的rows.Close()也没关系
当事务具有commit或rollback时,将按事务上下文关闭行。
https://stackoverflow.com/questions/55896253
复制相似问题