面试题答案
一键面试在Go语言中,panic
用于主动抛出异常,而recover
用于捕获panic
并恢复程序的正常执行流程,实现错误恢复机制。
以下是一个示例代码,展示在函数调用链中触发panic
后,如何通过recover
捕获并处理:
package main
import (
"fmt"
)
// 模拟可能会触发panic的函数
func innerFunction() {
panic("模拟一个panic")
}
// 调用可能触发panic的函数,并进行恢复处理
func outerFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("捕获到panic: %v\n", r)
}
}()
innerFunction()
}
func main() {
outerFunction()
fmt.Println("程序继续执行")
}
在上述代码中:
innerFunction
函数使用panic
主动抛出一个异常。outerFunction
函数使用defer
语句注册了一个匿名函数,该匿名函数中使用recover
捕获panic
。如果捕获到panic
,则打印出panic
的信息。- 在
main
函数中调用outerFunction
,当innerFunction
触发panic
时,outerFunction
中的recover
能够捕获并处理,然后程序继续执行fmt.Println("程序继续执行")
这一行代码,体现了错误恢复的效果。