golang 中使用数组创建slice时的注意事项

happinessaflower · · 1585 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang中,slice是对固定长度数组的一段切片,其底层是用对数值空间的指针实现的。

在golang中当使用一个数组来创建slice时如:

var array [5]int = [5]int{1,2,3,4,5}
//切割出数组中的4个值,创建一个slice
myslice := array[0:4]

打印array的值为:

1, 2, 3, 4, 5

打印mysqlice的值为:

1, 2, 3, 4

现在我们对myslice进行append操作

myslice = append(myslice,100)

打印array的值为:

1, 2, 3, 4, 100

打印mysqlice的值为:

1, 2, 3, 4, 100

现在我们再对myslice进行修改操作

myslice[0] = 50

打印array的值为:

50, 2, 3, 4, 100

打印mysqlice的值为:

50, 2, 3, 4, 100

当slice的长度没有超过创建是的数组的长度时,slice还是指向的创建时使用的数组。

但是!

现在myslice的长度已经和用来创建slice时使用的数组的长度一致了
我们再对myslice进行append操作,让myslice的长度大于创建时使用的数组的长度

myslice = append(myslice,200)

打印array的值为:

50, 2, 3, 4, 100

打印mysqlice的值为:

50, 2, 3, 4, 100, 200

myslice不是通过指针的方式跟arr建立关联的吗?为毛这种情况却没有改变arr的值呢?

因为当myslice超出arr的长度时,Go语言会隐含式地对array做了copy,并让myslice内部的指针重新指向了新数值,所以一切预期中修改array的值的操作,都不会生效!


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:happinessaflower

查看原文:golang 中使用数组创建slice时的注意事项

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

1585 次点击  
加入收藏 微博
下一篇:Golang基础入门
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传