面试题答案
一键面试- panic 的作用:
panic
用于抛出运行时异常,一旦执行panic
,程序会立刻停止当前函数的执行,开始逐层展开(unwind)调用栈,并且执行调用栈中每个函数的defer
语句。如果panic
没有被recover
捕获,程序最终会崩溃并打印出调用栈信息。
- recover 的作用:
recover
用于捕获由panic
抛出的异常。它只能在defer
函数中使用,通过recover
捕获到panic
后,可以阻止程序崩溃,并对异常进行处理。
- 示例代码:
package main
import (
"fmt"
)
// 定义一个会抛出 panic 的函数
func divide(a, b int) {
if b == 0 {
// 当除数为 0 时,抛出 panic
panic("division by zero")
}
result := a / b
fmt.Printf("%d divided by %d is %d\n", a, b, result)
}
func main() {
defer func() {
// 使用 recover 捕获 panic
if r := recover(); r != nil {
fmt.Printf("Recovered from panic: %v\n", r)
}
}()
// 调用可能会 panic 的函数
divide(10, 0)
fmt.Println("This line will not be printed if divide panics without recovery")
}
在上述代码中,divide
函数在除数为 0 时 panic
,而在 main
函数中通过 defer
语句和 recover
函数捕获并处理了这个 panic
,从而避免了程序崩溃。