面试题答案
一键面试1. panic和recover的作用
- panic:
- 在Go语言中,
panic
用于主动抛出一个运行时错误。当panic
被调用时,程序会立即停止当前函数的执行,并开始展开(unwind)调用栈,执行所有被延迟(defer
)的函数。如果在展开调用栈的过程中没有遇到recover
函数,程序将会终止并输出错误信息。
- 在Go语言中,
- recover:
recover
用于捕获panic
抛出的异常并恢复程序的正常执行流程。recover
只能在defer
函数中使用才会生效,它会终止当前的异常处理流程,返回panic
时传入的参数值(如果有),使得程序可以继续执行而不是崩溃。
2. 代码示例
package main
import (
"fmt"
)
func divide(a, b int) {
if b == 0 {
panic("division by zero")
}
result := a / b
fmt.Printf("%d divided by %d is %d\n", a, b, result)
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("Recovered from panic: %v\n", r)
}
}()
divide(10, 0)
fmt.Println("This line will not be printed if panic is not recovered")
}
在上述代码中:
divide
函数中,如果除数b
为0,就会调用panic
抛出一个异常。- 在
main
函数中,通过defer
和recover
组合来捕获panic
抛出的异常,当捕获到异常时,打印出恢复的信息。如果没有recover
,程序会因为panic
而终止并输出错误信息。