github.com/gogf/gf@v1.16.9/.example/database/gdb/mysql/gdb_transaction_closure.go (about) 1 package main 2 3 import ( 4 "github.com/gogf/gf/database/gdb" 5 "github.com/gogf/gf/frame/g" 6 ) 7 8 func main() { 9 var ( 10 err error 11 db = g.DB() 12 table = "user" 13 ) 14 if err = db.Transaction(func(tx *gdb.TX) error { 15 // Nested transaction 1. 16 if err = tx.Transaction(func(tx *gdb.TX) error { 17 _, err = tx.Model(table).Data(g.Map{"id": 1, "name": "john"}).Insert() 18 return err 19 }); err != nil { 20 return err 21 } 22 // Nested transaction 2, panic. 23 if err = tx.Transaction(func(tx *gdb.TX) error { 24 _, err = tx.Model(table).Data(g.Map{"id": 2, "name": "smith"}).Insert() 25 // Create a panic that can make this transaction rollback automatically. 26 panic("error") 27 }); err != nil { 28 return err 29 } 30 return nil 31 }); err != nil { 32 panic(err) 33 } 34 }