面试题答案
一键面试panic的作用
panic
用于主动抛出一个运行时错误,导致程序进入恐慌(panic)状态,立即停止当前函数的执行,并开始展开(unwind)调用栈,释放栈上的资源,直到找到对应的recover
处理或者程序崩溃。
recover的作用
recover
用于在defer
函数中捕获panic
抛出的异常,使程序能够从恐慌状态中恢复,继续执行后续代码,避免程序直接崩溃。
示例代码
package main
import (
"fmt"
)
func divide(a, b int) {
if b == 0 {
panic("除数不能为零")
}
result := a / b
fmt.Printf("%d 除以 %d 等于 %d\n", a, b, result)
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("捕获到异常:", r)
}
}()
divide(10, 0)
fmt.Println("程序继续执行")
}
在上述示例中:
divide
函数检查除数是否为零,如果为零则使用panic
抛出异常。- 在
main
函数中,使用defer
注册了一个匿名函数,在匿名函数中使用recover
捕获panic
抛出的异常。如果捕获到异常,打印出异常信息,程序不会崩溃,继续执行fmt.Println("程序继续执行")
。