MST

星途 面试题库

面试题:Go中Panic与Recover的基础应用

请简述在Go语言中,panic和recover的作用分别是什么?并编写一段简单代码,演示在函数中使用panic抛出异常,然后在调用函数中使用recover捕获并处理该异常。
36.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

1. panic和recover的作用

  • panic
    • 在Go语言中,panic用于主动抛出一个运行时错误。当panic被调用时,程序会立即停止当前函数的执行,并开始展开(unwind)调用栈,执行所有被延迟(defer)的函数。如果在展开调用栈的过程中没有遇到recover函数,程序将会终止并输出错误信息。
  • recover
    • recover用于捕获panic抛出的异常并恢复程序的正常执行流程。recover只能在defer函数中使用才会生效,它会终止当前的异常处理流程,返回panic时传入的参数值(如果有),使得程序可以继续执行而不是崩溃。

2. 代码示例

package main

import (
    "fmt"
)

func divide(a, b int) {
    if b == 0 {
        panic("division by zero")
    }
    result := a / b
    fmt.Printf("%d divided by %d is %d\n", a, b, result)
}

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Printf("Recovered from panic: %v\n", r)
        }
    }()
    divide(10, 0)
    fmt.Println("This line will not be printed if panic is not recovered")
}

在上述代码中:

  • divide函数中,如果除数b为0,就会调用panic抛出一个异常。
  • main函数中,通过deferrecover组合来捕获panic抛出的异常,当捕获到异常时,打印出恢复的信息。如果没有recover,程序会因为panic而终止并输出错误信息。