面试题答案
一键面试在Go语言中,defer
关键字和recover
函数配合可以捕获程序运行时发生的panic
,实现程序崩溃后的恢复。具体步骤如下:
- 使用
defer
关键字:defer
语句用于延迟函数的执行,通常在函数结束时执行。在可能发生panic
的代码块之后,使用defer
定义一个匿名函数。 - 在
defer
的匿名函数中使用recover
函数:recover
函数用于捕获当前goroutine
中发生的panic
。如果当前goroutine
没有发生panic
,recover
将返回nil
。
以下是一个示例代码:
package main
import (
"fmt"
)
func main() {
// 调用可能会发生panic的函数
recoverFromPanic()
fmt.Println("程序继续执行")
}
func recoverFromPanic() {
defer func() {
// 捕获panic
if r := recover(); r != nil {
fmt.Println("捕获到panic:", r)
}
}()
// 模拟一个会导致panic的操作
panic("这是一个测试panic")
}
在上述代码中:
recoverFromPanic
函数使用defer
关键字定义了一个匿名函数。- 匿名函数中使用
recover
函数捕获panic
。如果捕获到panic
,则打印出相关信息。 - 函数体中故意使用
panic
引发一个运行时错误。
通过这种方式,程序在发生panic
后不会崩溃,而是捕获到panic
并继续执行后续代码(如fmt.Println("程序继续执行")
)。