面试题答案
一键面试1. panic的作用:
panic
用于主动抛出异常,它会停止当前函数的执行,并开始展开调用栈,在展开过程中,会执行相关函数的defer
语句。如果在展开调用栈的过程中没有被recover
捕获,程序最终会崩溃并输出错误信息。
2. recover的作用:
recover
用于在defer
函数中捕获由panic
抛出的异常。它只有在defer
函数内部被调用才有效,如果当前没有发生panic
,调用recover
会返回nil
。
3. 示例代码:
package main
import (
"fmt"
)
func main() {
// 调用可能会panic的函数
test()
fmt.Println("程序继续执行")
}
func test() {
defer func() {
if r := recover(); r != nil {
fmt.Println("捕获到异常:", r)
}
}()
// 抛出异常
panic("这是一个测试异常")
}
在上述代码中,test
函数中通过panic
抛出了一个异常,然后在defer
函数中使用recover
捕获该异常,并打印出异常信息。main
函数中调用test
函数后,尽管test
函数内部发生了panic
,但由于recover
的捕获处理,main
函数中后续的fmt.Println("程序继续执行")
语句依然可以执行。