Когда я использую 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
}