面试题答案
一键面试在Go语言中,defer
语句用于注册一个函数调用,该调用会在包含 defer
语句的函数返回前执行。recover
函数用于捕获 panic
并恢复程序的正常执行流程。
以下是结合 defer
和 recover
来捕获并处理 panic
的方法描述及示例代码:
- 在可能引发
panic
的代码块中,使用defer
语句注册一个匿名函数。 - 在这个匿名函数中调用
recover
函数。如果当前函数发生了panic
,recover
会捕获到这个panic
并返回panic
的值(如果没有panic
,recover
返回nil
)。
示例代码如下:
package main
import (
"fmt"
)
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
// 这里模拟一个会引发 panic 的操作
num := 10
if num > 5 {
panic("Number is greater than 5")
}
fmt.Println("This line will not be printed if panic occurs")
}
在上述代码中,defer
注册的匿名函数会在 main
函数返回前执行。如果 main
函数中发生了 panic
,recover
会捕获到 panic
并打印出相应的信息,程序不会崩溃退出。如果没有 panic
,recover
返回 nil
,if
语句块不会执行。