問題:
為什麼調用 defer func( ) {recover() }() 成功恢復了一個恐慌的 goroutine,但是調用了 deferrecover()不是嗎?
答案:
根據recover()的文檔,「如果在延遲函數外部呼叫recove r,它將不停止恐慌序列。因此,它不會調用自身,從而導致持續的恐慌序列。
如果recover()將自身作為延遲函數調用,它將停止恐慌序列。然而,這是不合邏輯的。
一個有趣的變體:以下程式碼也避免了恐慌:
在這裡,我們建立具有呼叫內建recover( ) 函數的函數值的recover 變數。透過推遲對該變數值的調用,我們調用內建的recover(),然後它會停止恐慌序列。以上是為什麼「defer receive()」無法捕捉恐慌,而「defer func() {recover() }()」卻成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!