recover
# 概述
recover 内建函数被用于从panic或错误场景中恢复,让程序可以从panicking 重新获得控制权,停止终止过程进而恢复正常执行。
recover 只能在defer修饰的函数中使用:用于取得panic调用中传递过来的错误值,如果是正常执行,调用rocover会返回nil,且没有其它效果。
总结:panic会导致栈被展开直到defer修饰的recover()被调用或者程序中止。
package main
import (
"fmt"
)
func badCall() {
panic("bad end")
}
func test() {
defer func() {
if e := recover();e != nil {
fmt.Printf("panic %e", e)
}
}()
badCall()
}
func main() {
test()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
上次更新: 2023/01/11