package logic import "joybuywork/internal/plugins/jsonm" type Container interface { Exec() (err error) //执行逻辑 Before() (err error) //执行逻辑之前做的 Data() (data jsonm.JsonM) //执行逻辑 After(err error) //执行逻辑之后做的 TranCommit(err error) //提交事务 PushErr(data jsonm.JsonM, err error) //推送错误 } // Run 运行逻辑 func Run(container Container) (err error) { defer func() { container.TranCommit(err) container.After(err) }() defer func() { if r := recover(); r != nil { err = r.(error) container.PushErr(container.Data(), err) } }() err = container.Before() if err != nil { return } return container.Exec() }