func calc(index string, a, b int) int {
ret := a + b
fmt.Println(index, a, b, ret)
return ret
}
func main() {
a := 1
b := 2
defer calc("1", a, calc("2", a, b))
a = 0
defer calc("3", a, calc("4", a, b))
b = 1
}
上述代码的执行结果我认为应该是:
4 0 2 2
3 0 2 2
2 1 2 3
1 1 3 4
而实际确实:
2 1 2 3
4 0 2 2
3 0 2 2
1 1 3 4
defer执行不是先进后出的么?那么这个又是为什么呢?
相当于
如果你希望a改变之后能影响
calc("1", a, tmp)
的话,calc应该接受整型指针的参数