在崩溃时保持多个 Goroutine 运行
在 Go 中使用多个 Goroutine 时,必须考虑一个 Goroutine 的场景可能会崩溃或恐慌,从而可能影响整个程序。为了防止这种情况,程序必须妥善处理这些情况,让其他 goroutine 继续运行。
使用恢复函数
Go 提供了内置的 recovery( ) 能够处理恐慌并从中恢复的功能。要使用此函数,必须在延迟函数中调用它。这样,如果发生恐慌,它就会被捕获,并且程序会在延迟函数完成后恢复执行。
以下是如何使用recover()的示例:
func doPanic() { fmt.Println("About to panic") panic("test") } func protect(f func()) { defer func() { if err := recover(); err != nil { fmt.Printf("Recovered: %v", err) } }() f() } func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("Tick") } }
说明
输出
这段代码执行时,会输出:
About to panic Recovered: test Tick Tick Tick ...
这说明即使 doPanic 导致恐慌,由于recover()调用,程序继续运行,允许另一个goroutine继续执行无限期地。
需要注意的是,虽然recover()允许程序继续运行,但它并不能阻止潜在的恐慌发生。因此,仍然有必要找出并解决恐慌的根本原因,以防止将来再次发生。
以上是Go 的 `recover()` 函数如何在发生 Panic 后保持多个 Goroutines 运行?的详细内容。更多信息请关注PHP中文网其他相关文章!