Go语言中的For循环常见问题的处理方式

这篇文章主要讲解了“Go语言中的For循环常见问题的处理方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言中的For循环常见问题的处理方式”吧!

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的古塔网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

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

Go语言中的For循环常见问题的处理方式

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

Go语言中的For循环常见问题的处理方式

懵逼了吧!为什么会出现这种奇怪的现象呢?这就是golang的循环变量的作用域导致的。

在golang的for循环中,循环内部创建的函数变量都是共享同一块内存地址,for循环总是使用同一块内存去接收循环中的的value变量的值。不管循环多少次,value的内存地址都是相同的。事实确实如此,我们输出value的内存地址看下:

Go语言中的For循环常见问题的处理方式

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

Go语言中的For循环常见问题的处理方式

我们定义一个临时变量tmp,将value的值赋给tmp,问题就解决了。

评论中很多同学说,例子不足以说明这个问题,我这里写一段我们实际业务场景的代码,大家看看。

Go语言中的For循环常见问题的处理方式

Bid结构体中的属性我就不贴图了。这种情况很多新手同学会犯,尤其是从java转go的同学。

感谢各位的阅读,以上就是“Go语言中的For循环常见问题的处理方式”的内容了,经过本文的学习后,相信大家对Go语言中的For循环常见问题的处理方式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网站栏目:Go语言中的For循环常见问题的处理方式
文章转载:http://myzitong.com/article/gcppih.html