// 开始事务
tx := db.Begin()
// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')
tx.Create(...)
// ...
// 发生错误时回滚事务
tx.Rollback()
// 或提交事务
tx.Commit()
基于grom,go中如何接收错误并回滚
func test() (finErr error) {
// 开启事务
tx := db.Begin()
global.AppLog.Info("Begin Transaction...")
// 如果数据更新插入过程中出现问题,则回滚
defer func() {
// 这里我没用panic和recover去接收错误
if finErr != nil {
global.AppLog.Info("Rollback...")
tx.Rollback()
return
}
// 这是用panic的回滚方法
// err := recover()
// if err != nil {
// global.AppLog.Info("Rollback...")
// tx.Rollback()
// return
// }
}()
// 注意,一个事务下所有操作必须tx.,而不是db.
_, err := tx.create()
if err != nil {
global.AppLog.Info("创建出错")
// panic("创建出错")
return err
}
tx.Commit()
return nil
}