方法一:
func AddOrganization(organization *Organization) (errorCode common.ErrorCode) { o:=orm.NewOrm() defer func() { if e := recover(); e != nil { o.Rollback() errorCode = *common.DATABASE_ADD_ERROR } }() o.Begin() id, err := o.Insert(organization) if err!=nil { util.FileLogs.Error("新增机构失败:" + err.Error()) panic(err) } var networkOrg NetworkOrg networkOrg.NetworkId=organization.NetworkId networkOrg.OrgId=id networkOrg.JoinTime=time.Now() _, err = o.Insert(&networkOrg) if err!=nil { util.FileLogs.Error("新增网络机构对应关系失败:" + err.Error()) panic(err) } err=nil o.Commit() errorCode = *common.SUCCESS return errorCode }
方法二:
定义一个异常处理的方法
package lib type Exception struct { Try func() Catch func(interface{}) Finally func() } func (t Exception) Do() { if t.Finally != nil { defer t.Finally() } if t.Catch != nil { defer func() { if r := recover(); r != nil { t.Catch(r) } }() } t.Try() }
然后在需要用事务的地方套用
func AddOrganization(organization *Organization) (errorCode common.ErrorCode) { o:=orm.NewOrm() lib.Exception{ Try: func() { o.Begin() id, err := o.Insert(organization) if err!=nil { util.FileLogs.Error("新增机构失败:" + err.Error()) panic(err) } var networkOrg NetworkOrg networkOrg.NetworkId=organization.NetworkId networkOrg.OrgId=id networkOrg.JoinTime=time.Now() _, err = o.Insert(&networkOrg) if err!=nil { util.FileLogs.Error("新增网络机构对应关系失败:" + err.Error()) panic(err) } err=nil o.Commit() errorCode = *common.SUCCESS }, Catch: func(e interface{}) { o.Rollback() errorCode=*common.DATABASE_ADD_ERROR }, }.Do() return errorCode }
参考
https://www.cnblogs.com/chenqionghe/p/12958025.html
https://www.cnblogs.com/makelu/p/11226974.html
原文:https://www.cnblogs.com/yuluoxingkong/p/13272927.html