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 }