呼叫者函數如何從子 Goroutine 的 Panics 中恢復?
之前,假設 Goroutine 中的 Panic 會終止程式如果其呼叫者在恐慌發生之前完成。然而,對範例程式碼進行實驗卻發現情況並非如此。
範例程式碼:
意外行為:
儘管如此期望呼叫函數的恢復機制能夠處理goroutine的恐慌,整個程序仍然終止。
說明:
Go 規範指出:
當fun2 是goroutine 執行的頂級函數,且fun2 沒有從恐慌中恢復時,程式會在fun2 恐慌時終止。
因為 fun2 是其 goroutine 中的頂級函數,並且它會終止不處理恐慌,程式會提前終止。
Goroutine 自主:
一個 Goroutine 無法從另一個 Goroutine 的恐慌中恢復。因此,當 fun2 發生恐慌時,fun1 中的延遲呼叫不會被呼叫。
結論:
呼叫函數無法從它創建的 goroutine 中的恐慌中恢復,除非 goroutine 明確恢復避免程式呼叫者終止先前的恐慌。
以上是Go 中的呼叫函數可以從子 Goroutine 的 Panic 中恢復嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!