MST

星途 面试题库

面试题:Go中panic和recover机制的基本使用

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

知识考点

AI 面试

面试题答案

一键面试

panic的作用

panic用于主动抛出一个运行时错误,导致程序进入恐慌(panic)状态,立即停止当前函数的执行,并开始展开(unwind)调用栈,释放栈上的资源,直到找到对应的recover处理或者程序崩溃。

recover的作用

recover用于在defer函数中捕获panic抛出的异常,使程序能够从恐慌状态中恢复,继续执行后续代码,避免程序直接崩溃。

示例代码

package main

import (
    "fmt"
)

func divide(a, b int) {
    if b == 0 {
        panic("除数不能为零")
    }
    result := a / b
    fmt.Printf("%d 除以 %d 等于 %d\n", a, b, result)
}

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获到异常:", r)
        }
    }()
    divide(10, 0)
    fmt.Println("程序继续执行")
}

在上述示例中:

  1. divide函数检查除数是否为零,如果为零则使用panic抛出异常。
  2. main函数中,使用defer注册了一个匿名函数,在匿名函数中使用recover捕获panic抛出的异常。如果捕获到异常,打印出异常信息,程序不会崩溃,继续执行fmt.Println("程序继续执行")