golang mysql事务

2020-08-09  本文已影响0人  杜子龙
func RunTx(connection *db.Connection, fn func(tx *sql.Tx) error) (err error) {
    tx, err := connection.Begin()
    if err != nil {
        return
    }
    defer func() {
        if e := recover(); e != nil {
            stack := debugutil.Stack(3)
            log.Errorf("[TxFactory] panic recovered:\n%s\n%s", e, stack)
            tx.Rollback()
            err = fmt.Errorf("tx panic:%s", e)
        }
    }()
    if err := fn(tx); err != nil {
        tx.Rollback()
        return err
    }
    if err = tx.Commit(); err != nil {
        tx.Rollback()
        return
    }
    return
}
上一篇 下一篇

猜你喜欢

热点阅读