MST

星途 面试题库

面试题:Go语言中panic与recover的基础使用

请描述在Go语言中如何主动触发一个panic,并通过recover来捕获它,同时展示一段简单代码示例,说明捕获后如何做一些清理工作。
41.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,可以使用panic函数主动触发一个panic,并通过deferrecover函数来捕获它。defer语句用于在函数返回之前执行一些清理工作,recover函数用于捕获panic并恢复程序的正常执行。

以下是一个简单的代码示例:

package main

import (
    "fmt"
)

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered from panic:", r)
            // 在这里进行清理工作
            fmt.Println("Performing cleanup...")
        }
    }()

    fmt.Println("Before panic")
    panic("This is a test panic")
    fmt.Println("After panic") // 这行代码不会被执行
}

在上述代码中:

  1. 使用defer定义了一个匿名函数,这个函数会在main函数返回之前执行。
  2. 在匿名函数中,通过recover捕获panic。如果recover返回的值不为nil,说明捕获到了panic,并打印出恢复的信息。
  3. 在捕获到panic后,执行清理工作,例如打印清理信息。
  4. main函数中,通过panic函数主动触发一个panic,并传递一个字符串作为panic的原因。panic之后的代码不会被执行。