Xelloss0618 发表于 2024-10-28 15:40 谢谢,讲得明白。 |
zqiz 发表于 2024-10-28 11:35 不一样,你的原生代码是直接推迟执行 Println 函数,defer会将参数值拷贝下来。 火山里会将子语句体封装成一个无参数的匿名函数,没有参数,自然也没有拷贝参数值。 所以匿名函数里引用的是变量本身,输出的都是变量的最后值 5。 for i := 0; i < 5; i++ { defer func () { fmt.Println(i) } () } 如果给匿名函数加个参数,就可以输出 4 3 2 1 0 for i := 0; i < 5; i++ { defer func (n int) { fmt.Println(n) } (i) } |
沉默流星 发表于 2024-10-28 11:33 可以 |
zqiz 发表于 2024-10-28 11:35 很简单,你打开火山封装的延迟执行方法,看下封装的源码就明白了 |
沉默流星 发表于 2024-10-28 11:31 那是书的源码,我想知道:原生与中文写法一样,为什么结果不一样呢 |
zqiz 发表于 2024-10-28 11:08 建议你购买一套我的服务器封装视频教程,系统学习一下。才29.9元.当然不买也是可以的,只是个建议哈 |
zqiz 发表于 2024-10-28 11:08 方式对,要放在循环体里面把 换行格式输出 ,而不是放在延迟执行方法的方法体内 原因也很简单 原生你这样写就明白了
|
|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )
GMT+8, 2024-11-22 02:34 , Processed in 0.091268 second(s), 22 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.