ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

golang 实践

2022-04-05 00:31:33  阅读:175  来源: 互联网

标签:迭代 no int 性能 实践 golang persons range


Golang range循环陷阱

 

 https://zhuanlan.zhihu.com/p/158583555  

2. for和range性能大比拼
2.1 切片[]int
通过benchmark对for和range进行测试,遍历 []int 类型的切片,for 与 range 性能几乎没有区别。
2.2 切片[]struct
仅遍历下标的情况下,for 和 range 的性能几乎是一样的。
而同时遍历下标和值时,for 的性能大约是 range 的 2000 倍。
2.3 []int 和 []struct{} 的性能差异
与 for 不同的是,range 对每个迭代值都创建了一个拷贝。因此如果每次迭代的值内存占用很小的情况下,for 和 range 的性能几乎没有差异,但是如果每个迭代值内存占用很大,这种情况下差距就非常明显了。我们可以用以下例子来证明range迭代时返回的是拷贝,而并非元素本身。

persons := []struct{ no int }{{no: 1}, {no: 2}, {no: 3}}
for _, s := range persons {
    s.no += 10
}
for i := 0; i < len(persons); i++ {
    persons[i].no += 100
}
fmt.Println(persons) 
//结果: [{101} {102} {103}]

 

先对map进行了初始化,因为map*hashmap,所以这里其实是一个*hashmap指针的拷贝。

结合着这两个具体的for range编译器实现,可以看看为什么for range slice_优化方式有用,而for range map的方式没用呢

https://blog.csdn.net/weixin_34368949/article/details/88728243

 

 

 

标签:迭代,no,int,性能,实践,golang,persons,range
来源: https://www.cnblogs.com/youxin/p/16101205.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有