package main
import "fmt"
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("10", a, b))
a = 0
defer calc("2", a, calc("20", a, b))
b = 1
fmt.Println("a,b:", a, b)
}
defer不是最后倒序执行么?这个执行代码顺序为什么是
10 1 2 3
20 0 2 2
a,b: 0 1
2 0 2 2
1 1 3 4
https://yourbasic.org/golang/defer/
defer的函数参数是即时处理的,因此calc("10 calc("20 这些先出来了
昨天我查了一些文档,这个不只是函数参数立即执行,还有defer后参数赋值的问题(详见最后一次打印数值),我已经搞清楚了。不过谢谢你的回帖。