ZBLOG

func defertest(){ id:=32 defer id++ fmt.Println(id) }

这段代码中存在一个错误。在 Go 语言中,defer语句会将函数调用延迟到所在函数执行完成之后再执行,但对于defer语句中的参数,在执行 defer 语句时就会被计算出值,并保存起来。因此,defer id++ 中的id++会先被计算出结果再被传入defer函数中。

在Go语言中并不允许修改defer函数内部传递的参数值,所以这段代码是有问题的。如果需要修改变量id的值,可以通过匿名函数进行包装实现该功能。

下面是修正后的代码:

func defertest() {
    id := 32
    defer func() {
        id++
        fmt.Println(id)
    }()
}

这样做就可以正确地输出33了。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=5390

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?