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