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。但为什么 willDeferFunc2和will分别DeferFunc3返回1和呢?3这与 Go 中的闭包或变量作用域有关吗?
1 回答
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
如果DeferFunc1
对您有意义,那么DeferFunc3
它们应该说明相同的概念,即您可以修改命名的返回值。
在DeferFunc1
你的延迟中添加 3 到 1,得到你预期的 4。
在DeferFunc3
你的延迟中添加 1 到 2,得到 3。这里的裸返回,或者返回 t 会让你得到 4。但在这种情况下,t
是在延迟运行之前分配值 2,因此您得到 3。
由于DeferFunc2
您没有使用命名返回,因此您无法利用此技术。
- 1 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消