MST
星途 面试题库

面试题:Go语言中panic与recover在错误恢复的基本使用

请简述在Go语言中,如何使用panic和recover实现简单的错误恢复机制,并给出一个示例代码,展示在函数调用链中触发panic后,如何通过recover捕获并处理。
24.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,panic用于主动抛出异常,而recover用于捕获panic并恢复程序的正常执行流程,实现错误恢复机制。

以下是一个示例代码,展示在函数调用链中触发panic后,如何通过recover捕获并处理:

package main

import (
    "fmt"
)

// 模拟可能会触发panic的函数
func innerFunction() {
    panic("模拟一个panic")
}

// 调用可能触发panic的函数,并进行恢复处理
func outerFunction() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Printf("捕获到panic: %v\n", r)
        }
    }()
    innerFunction()
}

func main() {
    outerFunction()
    fmt.Println("程序继续执行")
}

在上述代码中:

  1. innerFunction函数使用panic主动抛出一个异常。
  2. outerFunction函数使用defer语句注册了一个匿名函数,该匿名函数中使用recover捕获panic。如果捕获到panic,则打印出panic的信息。
  3. main函数中调用outerFunction,当innerFunction触发panic时,outerFunction中的recover能够捕获并处理,然后程序继续执行fmt.Println("程序继续执行")这一行代码,体现了错误恢复的效果。