recover的扑捉,defer函数的接受者和参数
1、recover必须隔一个函数帧栈才能捕获到
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//错误
func main() {
recover()
panic(1)
}
//错误
func main() {
defer recover()
panic(1)
}
//正确
func main() {
defer func() {
recover()
}()
panic(1)
}
//错误
func main() {
defer func() {
defer func(){
recover()
}
}()
panic(1)
}
|
2、defer函数的参数和接受者是在defer语句出现的位置做计算的
1
2
3
4
5
6
|
func main(){
defer s.Add(1).Add(2)
s.Add(3)
}
//调用顺序
s.add(1)-->s.Add(3)-->s.Add(2)
|