上下文:
在提供的代碼:
<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中文網其他相關文章!