MST

星途 面试题库

面试题:Go语言中如何使用defer和recover实现panic的恢复

请描述在Go语言中,怎样结合defer语句和recover函数来捕获并处理程序运行时发生的panic,并且给出一个简单的示例代码。
47.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,defer 语句用于注册一个函数调用,该调用会在包含 defer 语句的函数返回前执行。recover 函数用于捕获 panic 并恢复程序的正常执行流程。

以下是结合 deferrecover 来捕获并处理 panic 的方法描述及示例代码:

  1. 在可能引发 panic 的代码块中,使用 defer 语句注册一个匿名函数。
  2. 在这个匿名函数中调用 recover 函数。如果当前函数发生了 panicrecover 会捕获到这个 panic 并返回 panic 的值(如果没有 panicrecover 返回 nil)。

示例代码如下:

package main

import (
    "fmt"
)

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered from panic:", r)
        }
    }()

    // 这里模拟一个会引发 panic 的操作
    num := 10
    if num > 5 {
        panic("Number is greater than 5")
    }
    fmt.Println("This line will not be printed if panic occurs")
}

在上述代码中,defer 注册的匿名函数会在 main 函数返回前执行。如果 main 函数中发生了 panicrecover 会捕获到 panic 并打印出相应的信息,程序不会崩溃退出。如果没有 panicrecover 返回 nilif 语句块不会执行。