Go语言 defer函数中的参数值[重复]

jk9hmnmh  于 2023-03-16  发布在  Go
关注(0)|答案(1)|浏览(117)

此问题在此处已有答案

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吗?

ldfqzlk8

ldfqzlk81#

https://go.dev/tour/flowcontrol/12
延迟调用的参数会立即求值,但函数调用要等到周围的函数返回后才执行。
因此,您可以看到延迟调用时t的值。

相关问题