func main() {
for i := 0; i < 3; i++ {
defer func(){
fmt.Println(i)
}()
}
}
输出结果:
3
3
3
我理解的输出结果:
2
1
0
请问为什么是输出 3 3 3呢?defer 不是后进先出吗?但怎么出来个3呢???疯了啊
有疑问加站长微信联系(非本文作者)

func main() {
for i := 0; i < 3; i++ {
defer func(){
fmt.Println(i)
}()
}
}
输出结果:
3
3
3
我理解的输出结果:
2
1
0
请问为什么是输出 3 3 3呢?defer 不是后进先出吗?但怎么出来个3呢???疯了啊
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
你对照这个试试就能知道为啥了
无defer 是 0, 1 ,2
有defer defer 定义的所有函数是在 return 之前运行 ,所有函数体内代码之后
有defer 你的函数运行逻辑可以改写成非defer 的代码
楼上正解