这里写目录标题
1. golang defer 那些坑
defer 以下几个特性, 使用时需要关注下。
- 即时的参数传递
- 调用 os.Exit() 时 defer 不会被执行
- defer 与 return 的先后顺序
1.1. 即时的 defer 函数参数传递
定义 defer 时传入的参数, 是作为拷贝传递的。
也就是说, 如果原来的变量值发生变化, 不会影响传给 defer 的参数。
例子如下:
package main
import (
"fmt"
)
func main(){
test()
}
func test() {
a := 0
defer func (i int) {
fmt.Println("in defer i:", i)
}(a)
a += 1
fmt.Println("a:", a)
}
输出结果:
a: 1
in defer i: 0
可以看到, 即使变量 a 发生变化, 延迟执行时变