为了账号安全,请及时绑定邮箱和手机立即绑定

Go defer 函数返回值

Go defer 函数返回值

Go
动漫人物 2023-07-10 17:29:07
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您没有使用命名返回,因此您无法利用此技术。


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信