面试题答案
一键面试在Go语言中,可以使用recover
函数来捕获panic
。以下是具体做法:
- 在可能发生
panic
的协程中使用defer
语句,在defer
函数中调用recover
。 - 这样即使该协程发生
panic
,也能捕获并处理,不会影响其他协程。
代码示例如下:
package main
import (
"fmt"
)
func worker() {
defer func() {
if r := recover(); r != nil {
fmt.Println("捕获到panic:", r)
}
}()
// 模拟可能发生panic的操作
panic("发生了一个panic")
}
func main() {
go worker()
// 主线程做其他事情,比如等待一段时间
select {}
}
在上述代码中:
worker
函数中使用defer
语句定义了一个匿名函数,这个匿名函数中使用recover
捕获panic
。main
函数中启动了worker
协程,并且通过select {}
让主线程不会退出,从而观察到worker
协程中panic
被捕获处理的情况。