recover()在go中的行为,当在延迟嵌套函数内调用时

问题描述 投票:0回答:0
我了解以下点WRT到GO中的行为。

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") }

呼叫从恐慌的角度“向上”,因此't“看到”恐慌。

go stack goland recover panic
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.