MST
星途 面试题库

面试题:Go 中 recover 如何在函数嵌套调用时正确捕获异常

假设存在函数 A 调用函数 B,函数 B 又调用函数 C,在函数 C 中可能会发生 panic,请问如何在函数 A 中使用 recover 捕获到这个 panic 并进行处理,请写出代码示例。
19.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

func C() {
    panic("函数C中发生panic")
}

func B() {
    C()
}

func A() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("在函数A中捕获到panic:", r)
        }
    }()
    B()
}

func main() {
    A()
    fmt.Println("程序继续执行")
}

上述代码使用Go语言实现,在A函数中通过deferrecover来捕获C函数中可能发生的panic

  1. C函数故意触发一个panic
  2. B函数调用C函数。
  3. A函数调用B函数,并通过defer语句注册一个匿名函数,这个匿名函数使用recover来捕获panic。如果捕获到panic,则打印相关信息。
  4. main函数中调用A函数,在捕获panic后程序可以继续执行后续代码。