Должен ли я вызывать * sql.Rows.Close () перед вызовом * sql.Tx.Rollback ()? - PullRequest
1 голос
/ 29 апреля 2019

Когда я использую sql пакет golang, если я делаю запрос в транзакции и сталкиваюсь с ошибкой при вызове rows.Scan(), какой метод мне следует вызывать первым после этой точки? *sql.Tx.Rollback() или *sql.Rows.Close()? В настоящее время я звоню *sql.Rows.Close() до *sql.Tx.Rollback(), но я хочу знать, что произойдет, если я переверну этот заказ?

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 Ответ

1 голос
/ 29 апреля 2019

https://go -review.googlesource.com / с / идти / + / 44812 /

Код здесь

Не имеет значения, даже если пропустить rows.Close() в транзакции

Когда транзакция имеет фиксацию или откат, строки будут закрыты по контексту транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...