MST

星途 面试题库

面试题:Go 中 panic 与 recover 的基础应用

请简要描述在 Go 语言中 panic 与 recover 的作用,并举例说明在一个简单函数中如何使用 panic 抛出异常,以及如何在调用该函数的外层函数中使用 recover 捕获异常并进行处理。
43.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. panic 的作用
    • panic 用于抛出运行时异常,一旦执行 panic,程序会立刻停止当前函数的执行,开始逐层展开(unwind)调用栈,并且执行调用栈中每个函数的 defer 语句。如果 panic 没有被 recover 捕获,程序最终会崩溃并打印出调用栈信息。
  2. recover 的作用
    • recover 用于捕获由 panic 抛出的异常。它只能在 defer 函数中使用,通过 recover 捕获到 panic 后,可以阻止程序崩溃,并对异常进行处理。
  3. 示例代码
package main

import (
    "fmt"
)

// 定义一个会抛出 panic 的函数
func divide(a, b int) {
    if b == 0 {
        // 当除数为 0 时,抛出 panic
        panic("division by zero")
    }
    result := a / b
    fmt.Printf("%d divided by %d is %d\n", a, b, result)
}

func main() {
    defer func() {
        // 使用 recover 捕获 panic
        if r := recover(); r != nil {
            fmt.Printf("Recovered from panic: %v\n", r)
        }
    }()
    // 调用可能会 panic 的函数
    divide(10, 0)
    fmt.Println("This line will not be printed if divide panics without recovery")
}

在上述代码中,divide 函数在除数为 0 时 panic,而在 main 函数中通过 defer 语句和 recover 函数捕获并处理了这个 panic,从而避免了程序崩溃。