内容简介:输出结果:为什么是这个结果呢, 因为例子中那么如何避免此类问题:
无论是普通的for循环,还是for range遍历其定义的局部变量都会重复使用
- 且看下例
type person struct { name string age int } func main() { ma := []person{ person{"zhangsan", 11}, person{"lisi", 13}, person{"wangwu", 12}, } mb := []*person{} for _, v := range ma { mb = append(mb, &v) } fmt.Println(mb[0], mb[1], mb[2]) }
输出结果:
&{wangwu 12} &{wangwu 12} &{wangwu 12} Process finished with exit code 0
为什么是这个结果呢, 因为例子中 直接取了&v的地址 ,前文所说, for中定义的局部变量都会重复使用, 所以导致mb中的三个结果都指向了v的地址。
那么如何避免此类问题:
- 在遍历中不要使用局部变量的地址进行操作, 如下:
// 上例中的for range循环内部改为: for _, v := range ma { val := v mb = append(mb, &val) }
- 上例ma变量定义成[]*person 类型, 然后 在for range中可以进行直接赋值操作:
func main() { ma := []*person{ &person{"zhangsan", 11}, &person{"lisi", 13}, &person{"wangwu", 12}, } mb := []*person{} for _, v := range ma { val := v mb = append(mb, val) } fmt.Println(mb[0], mb[1], mb[2]) }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 面试套路系列之用前序遍历团灭 8 类变形题
- 数组常见的遍历循环方法、数组的循环遍历的效率对比
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除
- Js遍历数组总结
- 遍历
- 遍历 DOM 注意点
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
形式感+:网页视觉设计创意拓展与快速表现
晋小彦 / 清华大学出版社 / 2014-1-1 / 59.00元
网页设计师从早年的综合性工作中分化出来,形成了相对独立的专业岗位,网页设计也不再是单纯的软件应用,它衍生出了许多独立的研究方向,当网站策划、交互体验都逐渐独立之后,形式感的突破和表现成为网页视觉设计的一项重要工作。随着时代的发展,网页设计更接近于一门艺术。网络带宽和硬件的发展为网页提供了使用更大图片、动画甚至视频的权利,而这些也为视觉设计师提供了更多表现的空间。另外多终端用户屏幕(主要是各种移动设......一起来看看 《形式感+:网页视觉设计创意拓展与快速表现》 这本书的介绍吧!