面试题答案
一键面试- 代码实现思路:
- 在可能发生
panic
的goroutine
中,通过defer
关键字定义一个函数,在这个函数中使用recover
来捕获panic
。 recover
只有在defer
函数中调用才有效,它会捕获到panic
传递的参数,从而实现异常处理。- 可以通过在主
goroutine
或其他合适的地方设置一个机制来处理从发生panic
的goroutine
传递出来的错误信息。
- 在可能发生
- 关键代码片段:
package main
import (
"fmt"
)
func main() {
// 启动一个goroutine
go func() {
defer func() {
if r := recover(); r != nil {
// 捕获到panic,处理异常
fmt.Println("Recovered from panic:", r)
}
}()
// 模拟可能发生panic的操作
panic("Some error occurred")
}()
// 防止主程序立即退出
select {}
}
在上述代码中:
- 定义了一个匿名
goroutine
,在这个goroutine
中通过defer
定义了一个匿名函数。 - 在匿名函数中使用
recover
捕获panic
,如果捕获到panic
(即r != nil
),则打印出捕获到的panic
信息。 - 主
goroutine
中的select {}
用于防止主程序立即退出,这样可以观察到goroutine
中panic
的捕获和处理情况。