对defer堆栈唯一可能的修改是“弹出”到它上面。
话虽如此,您可以使用变量使 defer 可选,以便提前退出 deferred 函数。例子:
func foo() {
var skipDefer bool
defer func() {
if skipDefer {
return
}
// Do body of defer
}()
// Do stuff
if someConditionIsTrue {
skipDefer = true
}
defer func() {
// Do this one unconditionally
}
// Do other stuff
}
Run Code Online (Sandbox Code Playgroud)
如果您真的想要,您还可以管理要手动执行的功能列表:
func foo() {
var deferreds []func()
defer func() {
for _, f := range deferreds {
f()
}
}()
// Add to and arrange `deferreds` to your heart's content
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |