doulao3905 2019-04-29 02:25
浏览 117
已采纳

我必须在* sql.Tx.Rollback()调用之前调用* sql.Rows.Close()吗?

When I using sql package of golang, if I make a query within transaction, and encounter an error while calling rows.Scan(), which method should I call first after this point? *sql.Tx.Rollback() or *sql.Rows.Close()? Currently I call *sql.Rows.Close() before *sql.Tx.Rollback(), but I want to know, what will happen if I reverse this order?

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
}
  • 写回答

1条回答 默认 最新

  • dr637349 2019-04-29 03:41
    关注

    https://go-review.googlesource.com/c/go/+/44812/

    The code is here

    It doesn't matter even if skip the rows.Close() within transaction

    When the transaction has commit or rollback, the rows will be closed by transaction context.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥20 python 3des pyDes库
    • ¥15 关于#mysql#安装失败的问题。MySQL
    • ¥15 想问一下for循环计算表达式的方法,第一次接触
    • ¥15 如何在VA框架上面加功能,去读取框架内任何app数据功能
    • ¥15 关于#c语言#的问题:用c或c++写一个计算下列问题有关软件工程的代码并加上分析
    • ¥15 Zeppelin0.10.0版本升级lib包下的shiro-web
    • ¥15 链表入队的指针内存问题
    • ¥20 vba如何写本地html文件执行js
    • ¥15 VS2022的C#如何创建
    • ¥20 关于#用户注册#的问题,如何解决?