一个可能遇到的问题
这里并没有说明所有关于defer语句的特性,defer语句有余下的性质。
1.A deferred function’s arguments are evaluated when the defer statement is evaluated.
2.Deferred function calls are executed in Last In First Out order after the surrounding function returns.
3.Deferred functions may read and assign to the returning function’s named return values.
所以下面的代码执行结果是0,而不是1.(根据上面的第一点)
func a() {
i := 0
defer fmt.Println(i) //evaluated arg i
i++
return
}
其中这一句
defer un(trace("b"))
就说明了你上述中的第1
点了。