MST

星途 面试题库

面试题:Go语言中panic和recover的基础应用

请简述Go语言中panic和recover的作用,并给出一个简单示例,展示在函数中如何使用panic抛出异常,以及在defer函数中如何使用recover捕获并处理该异常。
18.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

1. panic的作用

  • panic用于主动抛出异常,它会停止当前函数的执行,并开始展开调用栈,在展开过程中,会执行相关函数的defer语句。如果在展开调用栈的过程中没有被recover捕获,程序最终会崩溃并输出错误信息。

2. recover的作用

  • recover用于在defer函数中捕获由panic抛出的异常。它只有在defer函数内部被调用才有效,如果当前没有发生panic,调用recover会返回nil

3. 示例代码

package main

import (
    "fmt"
)

func main() {
    // 调用可能会panic的函数
    test()
    fmt.Println("程序继续执行")
}

func test() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获到异常:", r)
        }
    }()
    // 抛出异常
    panic("这是一个测试异常")
}

在上述代码中,test函数中通过panic抛出了一个异常,然后在defer函数中使用recover捕获该异常,并打印出异常信息。main函数中调用test函数后,尽管test函数内部发生了panic,但由于recover的捕获处理,main函数中后续的fmt.Println("程序继续执行")语句依然可以执行。