defer
看上去就像是 try-catch 的
finally
defer的机制
defer 调用时机
- 函数return 之后
- panic之后
- 函数结束之后
defer & instant
- 多个defer函数的调用可以看作栈式结构
- defer的参数在声明时确定(并不会lazy)
import (
"fmt"
)
func incr(v int) int {
defer func() {
fmt.Println("in defer1", v)
v++
}()
defer func() {
fmt.Println("in defer2", v)
v++
}()
v++
return v
}
func main() {
fmt.Println(incr(1))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
输出结果为
in defer2 2
in defer1 3
2
1
2
3
2
3