Goroutines,Go 中的轻量级线程,增强并发和异步。然而,例程的恐慌可能会破坏程序的稳定性。本文探讨了如何从 goroutine 中的恐慌中恢复,以将错误报告发送到像 Sentry 或 Raygun 这样的崩溃报告服务。
问题:
如何捕获来自子 goroutines 的恐慌在主程序中以方便出错报告?
答案:
Goroutines 无法从其他 Goroutine 的恐慌中恢复。惯用的解决方案是使用延迟函数将recover()调用注入到子goroutines中。
恢复恐慌的惯用方法:
使用包装函数的示例:
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中文网其他相关文章!