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

Mysql 我必须在调用*sql.Tx.Rollback()之前调用*sql.Rows.Close()?,mysql,go,Mysql,Go,当我使用golang的sql包时,如果我在事务中进行查询,并且在调用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 := t

当我使用golang的
sql
包时,如果我在事务中进行查询,并且在调用
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
}

代码在这里

即使跳过事务中的
行。Close()
,也无所谓

当事务已提交或回滚时,事务上下文将关闭这些行