
For循环在我们日常编码中可能用的中的很多。在很多业务场景中我们都需要用for循环处理。循环但golang中的中的for循环有一个大大大的坑,大家可否遇到。循环直接上代码:

我们写一个测试类,中的定义一个切片数组,循环然后循环迭代每个元素,中的将元素的循环值放到另一个切片。循环finalArrays的中的时候按照我们的预期应该输出1、2、循环3、中的4。循环但事与愿违,中的输出的循环结果如下图:

懵逼了吧!为什么会出现这种奇怪的现象呢?这就是源码下载golang的循环变量的作用域导致的。
在golang的中的for循环中,循环内部创建的函数变量都是共享同一块内存地址,for循环总是使用同一块内存去接收循环中的的value变量的值。不管循环多少次,value的内存地址都是相同的。事实确实如此,我们输出value的内存地址看下:

所以,可以看到,整个4次循环过程中,所有变量值都是在0xc0000b8780这个地址上迭代的。亿华云4次循环都指向的是同一块内存地址,最后一次赋值的操作变量的值是4,指向了这块内存地址,所以前三次的值都变成了4。那我们怎么优化呢?我们只需要定义临时变量。

我们定义一个临时变量tmp,将value的值赋给tmp,问题就解决了。
评论中很多同学说,例子不足以说明这个问题,我这里写一段我们实际业务场景的代码,大家看看。

Bid结构体中的属性我就不贴图了。这种情况很多新手同学会犯,尤其是从java转go的同学。
相关文章:
益华科技亿华云企商汇源码库源码下载服务器租用香港云服务器IT资讯网IT技术网益强编程舍益强科技益强前沿资讯技术快报极客编程亿华智慧云全栈开发益强编程堂益强数据堂思维库极客码头益华IT技术论坛亿华云亿华互联科技前瞻益华科技编程之道运维纵横益华科技码力社益强智未来云智核智能时代亿华灵动益强IT技术网亿华智造亿华云计算多维IT资讯益强智囊团亿华科技码上建站云站无忧益强科技
0.1501s , 11645.1796875 kb
Copyright © 2025 Powered by Go语言的中的For循环之大坑,亿华互联 滇ICP备2023000592号-16