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

golang 中使用数组创建slice时的注意事项,第1张

概述golang中,slice是对固定长度数组的一段切片,其底层是用对数值空间的指针实现的。 在golang中当使用一个数组来创建slice时如: var array [5]int = [5]int{1,2,3,4,5}//切割出数组中的4个值,创建一个slicemyslice := array[0:4] 打印array的值为: 1, 2, 3, 4, 5 打印mysqlice的值为: 1, 2,

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

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

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

打印array的值为:

1,2,3,4,5

打印MysqLice的值为:

1,4

现在我们对myslice进行append *** 作

myslice = append(myslice,100)

打印array的值为:

1,100

打印MysqLice的值为:

1,100

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

myslice[0] = 50

打印array的值为:

50,100

打印MysqLice的值为:

50,100

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

但是!

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

myslice = append(myslice,200)

打印array的值为:

50,100,200

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

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

总结

以上是内存溢出为你收集整理的golang 中使用数组创建slice时的注意事项全部内容,希望文章能够帮你解决golang 中使用数组创建slice时的注意事项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1288465.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存