以 golang 为例:
func do() {
err := step1()
if err != nil { return err}
err = step2()
if err != nil {
rollback_err = undo_step1();
if rollback_err != nil {
return err
}
}
}
这样写的缺点是,步数越多后面越复杂。
尝试每个步骤后使用 defer 注册 rollback,带来的问题是无法直接跳出 defer 栈: 比如 step3 错误,undo_step2() 也要进行错误处理,如果也错误,那应该直接返回错误而不是继续执行 undo_step1 (在 step1 之后注册的 defer )
有什么更好的模式吗?