golang 中使用数组创建slice时的注意事项
2015-03-09 20:47
375 查看
golang中,slice是对固定长度数组的一段切片,其底层是用对数值空间的指针实现的。
在golang中当使用一个数组来创建slice时如:
打印array的值为:
打印mysqlice的值为:
现在我们对myslice进行append操作
打印array的值为:
打印mysqlice的值为:
现在我们再对myslice进行修改操作
打印array的值为:
打印mysqlice的值为:
当slice的长度没有超过创建是的数组的长度时,slice还是指向的创建时使用的数组。
但是!
现在myslice的长度已经和用来创建slice时使用的数组的长度一致了
我们再对myslice进行append操作,让myslice的长度大于创建时使用的数组的长度
打印array的值为:
打印mysqlice的值为:
myslice不是通过指针的方式跟arr建立关联的吗?为毛这种情况却没有改变arr的值呢?
因为当myslice超出arr的长度时,Go语言会隐含式地对array做了copy,并让myslice内部的指针重新指向了新数值,所以一切预期中修改array的值的操作,都不会生效!
在golang中当使用一个数组来创建slice时如:
[code]var array [5]int = [5]int{1,2,3,4,5} //切割出数组中的4个值,创建一个slice myslice := array[0:4]
打印array的值为:
[code]1, 2, 3, 4, 5
打印mysqlice的值为:
[code]1, 2, 3, 4
现在我们对myslice进行append操作
[code]myslice = append(myslice,100)
打印array的值为:
[code]1, 2, 3, 4, 100
打印mysqlice的值为:
[code]1, 2, 3, 4, 100
现在我们再对myslice进行修改操作
[code]myslice[0] = 50
打印array的值为:
[code]50, 2, 3, 4, 100
打印mysqlice的值为:
[code]50, 2, 3, 4, 100
当slice的长度没有超过创建是的数组的长度时,slice还是指向的创建时使用的数组。
但是!
现在myslice的长度已经和用来创建slice时使用的数组的长度一致了
我们再对myslice进行append操作,让myslice的长度大于创建时使用的数组的长度
[code]myslice = append(myslice,200)
打印array的值为:
[code]50, 2, 3, 4, 100
打印mysqlice的值为:
[code]50, 2, 3, 4, 100, 200
myslice不是通过指针的方式跟arr建立关联的吗?为毛这种情况却没有改变arr的值呢?
因为当myslice超出arr的长度时,Go语言会隐含式地对array做了copy,并让myslice内部的指针重新指向了新数值,所以一切预期中修改array的值的操作,都不会生效!
相关文章推荐
- php使用js保存的json cookie 字符串,然后解析成数组,需要注意的事项
- Socket的创建、销毁、使用的注意事项
- 使用eclipse 开发 嵌入式Linux驱动(注意事项)(make:***没有规则可言创建目标"all".停止 的解决方法)
- CfileDialog的使用方法与注意事项及多选打开对话框的创建
- php数组合并array_merge()函数使用注意事项
- 使用xib创建CollectionViewCell注意事项
- .NET数组使用中的注意事项小结
- php数组合并array_merge()函数使用注意事项
- Java使用for( : ) 为String[] 数组初始化注意事项
- java入门第七天 数组开个头 创建数组的几种方式和注意事项
- ADT14以上创建工程使用NDK开发openGL es要注意事项!
- php数组使用注意事项
- 包含别人的dll,然后我们用类库再次封装成dll的时候的注意事项;源文件与模块生成时的文件不同;创建调试信息文件 ··PDB时发生意外的错误,进程无法访问文件,因为另一个程序正在使用此文件
- .NET中 使用数组的注意事项
- JavaScript数组使用注意事项
- 创建线程函数的使用注意事项
- 常用sql命令@oracle数据类型概括@权限、角色、用户的创建于使用@伪列及其注意事项
- 使用条码控件TBarCode SDK创建条码图像的注意事项
- 数据库创建及使用注意事项
- 创建使用msg,srv和topic注意事项