首頁  >  文章  >  後端開發  >  Go 中的呼叫函數可以從子 Goroutine 的 Panic 中恢復嗎?

Go 中的呼叫函數可以從子 Goroutine 的 Panic 中恢復嗎?

Linda Hamilton
Linda Hamilton原創
2024-10-28 18:10:02930瀏覽

Can a Caller Function Recover from a Child Goroutine's Panic in Go?

呼叫者函數如何從子 Goroutine 的 Panics 中恢復?

之前,假設 Goroutine 中的 Panic 會終止程式如果其呼叫者在恐慌發生之前完成。然而,對範例程式碼進行實驗卻發現情況並非如此。

範例程式碼:

意外行為:

儘管如此期望呼叫函數的恢復機制能夠處理goroutine的恐慌,整個程序仍然終止。

說明:

Go 規範指出:

當fun2 是goroutine 執行的頂級函數,且fun2 沒有從恐慌中恢復時,程式會在fun2 恐慌時終止。

因為 fun2 是其 goroutine 中的頂級函數,並且它會終止不處理恐慌,程式會提前終止。

Goroutine 自主:

一個 Goroutine 無法從另一個 Goroutine 的恐慌中恢復。因此,當 fun2 發生恐慌時,fun1 中的延遲呼叫不會被呼叫。

結論:

呼叫函數無法從它創建的 goroutine 中的恐慌中恢復,除非 goroutine 明確恢復避免程式呼叫者終止先前的恐慌。

以上是Go 中的呼叫函數可以從子 Goroutine 的 Panic 中恢復嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn