上下文:
在提供的代码:
<code class="go">func sub(){ defer func (){ panic(2) }() panic(1) } func main(){ defer func(){ x:=recover() println(x.(int)); }() sub() }</code>
似乎第一个恐慌(恐慌(1))被第二个恐慌(恐慌(2))“覆盖”。
是可以接受吗?
在 Golang 中,延迟函数引起的恐慌并不构成独特或异常情况。它只是表明恐慌序列将持续存在。
如示例代码所示,允许在 defer 函数中调用可能发生恐慌的 Golang 函数。即使恐慌已经发生,在 defer 函数中出现恐慌也是可以接受的。
机制:
根据 Go 规范:
“如果 D 正常返回,而没有引发新的恐慌,则恐慌序列就会停止。”
在示例中,延迟函数 (D) 返回而不触发新的恐慌。因此,panic(1) 启动的恐慌序列将停止。
其他注意事项:
以上是在 Golang 中现有的紧急情况下,您可以在延迟函数中发生紧急情况吗?的详细内容。更多信息请关注PHP中文网其他相关文章!