面试题答案
一键面试在Go语言中,defer
语句用于注册一个函数调用,该函数会在其所在的函数返回前执行。recover
函数用于在发生panic
时恢复程序的正常执行流程。只有在defer
函数中调用recover
才能捕获到panic
。
示例代码如下:
package main
import (
"fmt"
)
func main() {
test()
fmt.Println("程序继续执行")
}
func test() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("捕获到异常: %v\n", r)
}
}()
panic("模拟一个运行时异常")
}
在上述代码中:
test
函数内部使用defer
注册了一个匿名函数。- 这个匿名函数使用
recover
来捕获可能发生的panic
。如果recover
返回的值不为nil
,则表示捕获到了panic
,可以对异常信息进行处理。 test
函数中通过panic
模拟了一个运行时异常。当panic
发生时,正常的执行流程被中断,但是由于defer
语句的存在,注册的匿名函数会被执行,从而recover
能够捕获到panic
并输出错误信息。main
函数调用test
函数后,test
函数捕获并处理异常,main
函数的后续代码fmt.Println("程序继续执行")
会继续执行。