MST

星途 面试题库

面试题:Go中panic和recover的基本使用场景

请描述在Go语言中,panic和recover通常在哪些情况下会被使用?请举例说明如何在一个简单函数中使用panic抛出异常,以及使用recover进行捕获处理。
48.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. panic和recover的使用场景
    • panic:通常用于程序遇到不可恢复的错误时,比如在运行时检测到不应该出现的状态,例如数组越界访问、空指针引用等情况。它会导致当前函数停止执行,并且逐层向上展开调用栈,直到程序崩溃,除非在展开过程中被recover捕获。
    • recover:用于在defer函数中捕获panic,从而避免程序崩溃。它允许程序在遇到严重错误时进行一些清理操作,然后继续执行其他逻辑或者优雅地结束程序。
  2. 示例代码
package main

import (
    "fmt"
)

func simpleFunction() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered from panic:", r)
        }
    }()
    fmt.Println("Before panic")
    panic("This is a sample panic")
    fmt.Println("After panic") // 这行代码不会被执行
}

在上述代码中:

  • simpleFunction函数中有一个defer语句块,其中使用recover来捕获可能发生的panic
  • 函数开始时打印Before panic,然后使用panic抛出一个异常,panic之后的fmt.Println("After panic")代码不会被执行。
  • defer中的recover捕获到panic并打印Recovered from panic: This is a sample panic,避免了程序的崩溃。