面试题答案
一键面试- 代码实现思路:
- 在发生
panic
的goroutine
中,使用defer
语句结合recover
函数来捕获panic
。 - 将捕获到的异常信息通过通道传递给主
goroutine
。 - 主
goroutine
从通道中读取异常信息进行统一处理。
- 在发生
- 关键代码片段:
package main
import (
"fmt"
)
func main() {
errCh := make(chan interface{})
go func() {
defer func() {
if r := recover(); r != nil {
errCh <- r
}
}()
// 模拟会发生panic的操作
panic("模拟的panic")
}()
if err := <-errCh; err != nil {
fmt.Printf("主goroutine捕获到异常: %v\n", err)
}
}