面试题答案
一键面试panic 的作用
panic
用于在 Go 语言中主动抛出一个运行时错误,它会立即停止当前函数的执行,并开始展开调用栈,执行调用栈中每个函数的 defer
语句。如果 panic
没有被 recover
捕获,程序将会崩溃并打印出调用栈信息。
recover 的作用
recover
用于捕获由 panic
抛出的异常,它只能在 defer
函数中使用。当 recover
被调用时,如果当前的 goroutine 处于 panic
状态,它会停止 panic
过程并返回 panic
时传入的参数,从而让程序可以从 panic
中恢复并继续执行。
示例代码
package main
import (
"fmt"
)
// 模拟一个可能会抛出异常的函数
func divide(a, b int) int {
if b == 0 {
panic("除数不能为零")
}
return a / b
}
// 调用链中的中间函数
func calculate() {
defer func() {
if r := recover(); r != nil {
fmt.Println("捕获到异常:", r)
}
}()
result := divide(10, 0)
fmt.Println("计算结果:", result)
}
func main() {
calculate()
fmt.Println("程序继续执行")
}
在上述代码中:
divide
函数在除数为零时使用panic
抛出一个异常。calculate
函数通过defer
和recover
来捕获并处理divide
函数抛出的异常。如果捕获到异常,打印出异常信息。main
函数调用calculate
函数,在异常被捕获并处理后,程序能够继续执行,打印出 "程序继续执行"。