Goroutines,Go 中的輕量級線程,增強並發和非同步。然而,例程的恐慌可能會破壞程式的穩定性。本文探討如何從 goroutine 的恐慌中恢復,以將錯誤報告傳送到像 Sentry 或 Raygun 這樣的崩潰報告服務。
問題:
如何捕捉來自子 goroutines 的恐慌在主程式中以方便出錯報告?
答案:
Goroutines 無法從其他 Goroutine 的恐慌中恢復。慣用的解決方案是使用延遲函數將recover()呼叫注入到子goroutine中。
恢復恐慌的慣用方法:
使用包裝函數的範例:
func wrap(f func()) { defer func() { if r := recover(); r != nil { fmt.Println("Caught:", r) } }() f() }
用法:
go wrap(func() { panic("catch me") })
包裝函數的好處方法:
注意:
恐慌應該是在它們發生的 Goroutine 中處理。使用包裝函數可以進行恢復,但 goroutine 仍然會終止。
以上是如何從 Go Goroutines 中的 Panic 中恢復並向 Sentry 等服務報告錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!