在崩溃的情况下保持 Goroutine 运行
在 Go 中,goroutines 很强大,但很容易因为错误或恐慌而崩溃。为了确保一个 goroutine 的故障不会影响其他 goroutine,开发人员可能想知道是否有一种方法可以让不受影响的 goroutine 保持运行。
为了从恐慌中恢复,使用内置的recover()函数。它允许您在延迟函数中捕获恐慌。以下辅助函数 Protect() 使用此机制来启动具有紧急恢复功能的 Goroutines:
func protect(f func()) { defer func() { if err := recover(); err != nil { log.Printf("Recovered: %v", err) } }() f() }
要使用此保护,只需将您的函数作为参数传递给 Protect() 即可。通过将此调用包装在连续打印“tick”的 for 循环中,我们可以演示即使另一个 goroutine 中发生恐慌,受 protected() 保护的 goroutine 如何继续运行:
func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("tick") } }
这个测试应用程序将输出:
2021/03/04 14:12:31 about to panic 2021/03/04 14:12:31 Recovered: test tick tick tick ...
如你所见,doPanic函数中的panic被恢复并处理,而受保护的goroutine继续运行并打印 “打钩。”这种方法有效地将 goroutine 与恐慌隔离开来,确保单个故障不会传播并导致整个应用程序崩溃。
以上是即使在发生恐慌之后,如何让我的 Go Goroutines 继续运行?的详细内容。更多信息请关注PHP中文网其他相关文章!