加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Go语言的中的For循环之大坑

发布时间:2019-10-19 04:38:35 所属栏目:建站 来源:架构之路
导读:For轮回在我们一般编码中也许用的许多。在许多营业场景中我们都必要用for轮回处理赏罚。但golang中的for轮回有一个大大大的坑,各人能否碰着。直接上代码: 我们写一个测试类,界说一个切片数组,然后轮回迭代每个元素,将元素的值放到另一个切片。轮回finalAr

 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的同窗。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读