MST

星途 面试题库

面试题:Go中使用panic和recover处理并发场景异常

在一个包含多个goroutine并发执行的程序中,假设某个goroutine发生了panic,如何使用recover来确保程序不会崩溃,同时能将该异常信息传递给主goroutine进行统一处理?请给出具体的代码实现思路和关键代码片段。
32.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 代码实现思路
    • 在发生panicgoroutine中,使用defer语句结合recover函数来捕获panic
    • 将捕获到的异常信息通过通道传递给主goroutine
    • goroutine从通道中读取异常信息进行统一处理。
  2. 关键代码片段
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)
    }
}