主题
文章
项目
资源
图书
Go网址导航
下载
官方文档
英文文档
中文文档
标准库中文版
Go指南
注册
登录
首页
主题
Go基础
defer疑问
joraboy328
·
· 2520 次点击
如下代码为何输出3? for i:=0;i<3;i++{ defer func() { fmt.Println(i) }() } }
阅读全文
查看全部 4 个评论
yuhun17
defer表示最后才会执行,也就是for循环了3次,但是defe会被r放入一个类似栈结构中, 然后for结束(函数结束)才执行defer,所以输出是3. 建议去读一下go语言圣经这本书,基本覆盖了所有基础知识
评论于 2017-08-31 01:09:40
#3
更多评论
zhaojiexi
因为是在闭包里 所以它i取得是外层i的内存地址 建议你可以去看看闭包
评论于 2017-08-31 00:27:59
#1
buscoop
纸上得来终觉浅,绝知此事要躬行!
你这里的defer作用域在for里面,要等for结束那一时,才defer
评论于 2017-08-31 01:09:33
#2
我要评论
用户登录
记住登录状态
没有账号?
注册
忘记密码?
或
GitHub 登录
Gitea 登录
Go今日面试题
今日阅读排行
一周阅读排行
X
登录和大家一起探讨吧
用户名
密码
记住登录状态
登录
GitHub 登录
忘记密码?
还不是会员
现在注册