recover()
遵循iMmediate评估但deledecution 因此,如果未在延期函数(代码段1)中调用它,则将对
recover()
进行评估,然后在此时进行评估。
如果在延期函数中称为函数调用,则将函数调用注册但被称为
后发生了,我们已成功恢复。
recover()
现在牢记这一点,我编写了以下代码。
nil
我在线搜索了推理,我得到了相同的答案。
如果以下任何条件
保持:
panic的论点为零;高鲁尼并不恐慌;
失电并未通过延迟函数直接调用。
但是我不明白为什么第二代摘要不起作用?!?严格来说,满足所有3个条件。我缺少警告吗? 我猜第三种条件不满足,因为它不是直接调用的,而是通过嵌套函数调用来调用。但是,为什么只需要延期呢?
?相似的问题:here
,here
正如您所说的那样,不满足第三种条件。恢复无法在嵌套功能中起作用,因为- ,
here- 和
here- 。
recover()
通过呼叫堆栈“向下”传播,在第二个片段中,
panic
函数中的
package main
import "fmt"
func main() {
defer recover() // since not called inside a deferred func, it will not recover successfully
panic("This is a panic")
}