gpt4 book ai didi

去延迟函数返回值

转载 作者:IT王子 更新时间:2023-10-29 00:57:16 26 4
gpt4 key购买 nike

func main() {

println(DeferFunc1(1))
println(DeferFunc2(1))
println(DeferFunc3(1))
}

func DeferFunc1(i int) (t int) {
t = i
defer func() {
t += 3
}()
return t
}

func DeferFunc2(i int) int {
t := i
defer func() {
t += 3
}()
return t
}

func DeferFunc3(i int) (t int) {
defer func() {
t += i
}()
return 2
}

以上代码将打印:4 1 3。谁能解释一下?当然,DeferFunc1 应该返回 4。但是为什么DeferFunc2DeferFunc3会分别返回13呢?这是关于 Go 中的闭包或变量作用域吗?

最佳答案

如果 DeferFunc1 对您有意义,那么 DeferFunc3 应该和它们说明相同的概念,即您可以修改命名的返回值。

DeferFunc1 中,您在延迟中将 3 加 1,得到预期的 4。
DeferFunc3 中,您在 defer 中将 1 添加到 2,得到 3。此处的裸返回或 t 的返回将使您得到 4。但在这种情况下,t在你的 defer 运行之前被赋值为 2,所以你得到 3。
DeferFunc2 中,您没有使用命名返回,因此您无法利用此技术。

关于去延迟函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57465268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com