此问题在此处已有答案:
When defer func evaluates its parameters(3个答案)
Go - Inconsistent Evaluation of Deferred Functions(3个答案)
The deferred call's arguments are evaluated immediately(4个答案)
Go defer
does not behave as expected when Unmount(2个答案)
golang defer not evaluating when expected(2个答案)
52分钟前就关门了。
defer函数如下所示
func DeferFunc() (t int) {
defer func(i int) {
fmt.Println(i)
}(t)
t = 1
return t
}
我想知道为什么结果打印0而不是1?不应该将t的值复制到i吗?
1条答案
按热度按时间ldfqzlk81#
https://go.dev/tour/flowcontrol/12
延迟调用的参数会立即求值,但函数调用要等到周围的函数返回后才执行。
因此,您可以看到延迟调用时
t
的值。