面试题答案
一键面试在Go语言中,在Goroutine内捕获并处理运行时的panic异常可以使用recover
函数。recover
只能在defer
修饰的函数中使用,用于捕获当前Goroutine中发生的panic。
以下是一个简单的代码示例:
package main
import (
"fmt"
)
func main() {
go func() {
defer func() {
if r := recover(); r != nil {
fmt.Println("捕获到panic:", r)
}
}()
// 模拟一个会导致panic的操作
panic("这是一个测试panic")
}()
// 防止主函数退出
select {}
}
在上述代码中:
- 在匿名的Goroutine中,使用
defer
定义了一个函数。 - 在这个
defer
函数中,使用recover
来捕获可能发生的panic。如果recover
返回的值不为nil
,说明发生了panic,此时可以对其进行处理,这里简单地打印出捕获到的panic信息。 - 主函数使用
select {}
来防止程序直接退出,以便观察Goroutine内的处理结果。