MST

星途 面试题库

面试题:Go中recover方法在异常处理中的常规用法

在Go语言中,简要描述recover方法如何与defer语句配合使用来捕获和处理程序运行时的异常。请给出一个简单的示例代码,说明在函数中可能出现的panic情况,以及如何使用recover来恢复程序执行并输出有意义的错误信息。
32.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,defer语句用于注册一个函数调用,该函数会在其所在的函数返回前执行。recover函数用于在发生panic时恢复程序的正常执行流程。只有在defer函数中调用recover才能捕获到panic

示例代码如下:

package main

import (
    "fmt"
)

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

func test() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Printf("捕获到异常: %v\n", r)
        }
    }()
    panic("模拟一个运行时异常")
}

在上述代码中:

  1. test函数内部使用defer注册了一个匿名函数。
  2. 这个匿名函数使用recover来捕获可能发生的panic。如果recover返回的值不为nil,则表示捕获到了panic,可以对异常信息进行处理。
  3. test函数中通过panic模拟了一个运行时异常。当panic发生时,正常的执行流程被中断,但是由于defer语句的存在,注册的匿名函数会被执行,从而recover能够捕获到panic并输出错误信息。
  4. main函数调用test函数后,test函数捕获并处理异常,main函数的后续代码fmt.Println("程序继续执行")会继续执行。