上一文中讲到 defer 会在宿主函数 return 之前调用,那么我们就是想在宿主函数执行到中间调用,怎么办呢?
1. 改变宿主函数逻辑,分成多个函数,需要的那个函数里 defer 。
2. 使用匿名函数,将 defer 包在匿名函数里:

调用:

输出:

可以看到,defer 的那个 unlock 实在匿名函数执行完成之前被调用的,已经跑到了 exit inner 后面。
多个 defer 怎么办?
这时遵循栈的顺序,即,后定义先执行。
defer a()
defer b()
defer c()
他们的执行顺序是:
c()
b()
a()
HOHO...
本文探讨了在Go语言中如何灵活运用defer语句,通过调整宿主函数逻辑或使用匿名函数包裹defer,实现更复杂的控制流程。文章详细解释了多个defer语句的执行顺序,遵循后进先出原则。

被折叠的 条评论
为什么被折叠?



