github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgSql/TransactionCallback.go (about)

     1  package kmgSql
     2  
     3  import (
     4  	"database/sql"
     5  )
     6  
     7  //使用默认数据库开启事务回调
     8  func MustTransactionCallback(f func(tx Tx)) {
     9  	db := GetDb()
    10  	var err error
    11  	var tx *sql.Tx
    12  	hasFinish := false
    13  	defer func() { //panic的时候处理
    14  		if !hasFinish {
    15  			tx.Rollback()
    16  			//不用recover,让异常继续向上传递
    17  		}
    18  	}()
    19  	tx, err = db.Begin()
    20  	if err != nil {
    21  		panic(err)
    22  	}
    23  	f(NewTx(tx))
    24  	err = tx.Commit() //TODO commit失败怎么搞?
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  	hasFinish = true
    29  	return
    30  }