再小谈下defer的操作,
1:不传递参数,其内部的参数是使用的函数返回前变量的最终值。
2:传参数,可以想成就是到达那行就把参数传过去了,所以不是最终值。
3:传的是参数,所以和1的结果是一个意思。好处是3可以写成独立函数,而不必须是匿名函数,再需要代码复用的时候,3明显是更方便的选择。
func testDefer1() {
i := 0
defer func() {
fmt.Println(i)
}()
i = 1
}
func testDefer2() {
i := 0
defer func(i int) {
fmt.Println(i)
}(i)
i = 1
}
func testDefer3() {
i := 0
defer func(i *int) {
fmt.Println(*i)
}(&i)
i = 1
}
func main() {
testDefer1()
testDefer2()
testDefer3()
}
output:
1
0
1
网友评论