【发布时间】:2022-01-19 05:22:58
【问题描述】:
我想知道 Go 如何处理失败的数据库事务。我的代码如下:
func assert(e interface{}) {
if e != nil {
panic(e)
}
}
//the caller will handle panics
func SomeDBOperation(db *sql.DB) {
tx, err := db.Begin()
assert(err)
defer func() {
if e := recover(); e != nil {
tx.Rollback()
panic(e)
}
assert(tx.Commit())
}()
// some code that can possibly panic...
}
我可以像这样简化错误检查吗:
func SomeDBOperation(db *sql.DB) {
tx, err := db.Begin()
assert(err)
defer func() { assert(tx.Commit()) }()
// some code that can possibly panic...
}
顺便说一句,我正在使用 SQLite,如果有任何答案是特定于 db 的,我也想知道 MySQL 的行为。
【问题讨论】: