本文摘自php中文网,作者(*-*)浩,侵删。

golang 的slice是一个指向底层的数组的指针结构体。
这个结构体有三个属性,1.指向数组指针,2.len: slice中元素的数量 3.cap:slice占用内存数量。
只有深刻理解这三个属性才能在使用slice中不至于犯错。 (推荐学习:go)
正确理解变量和共享
多个slice之间可以共享底层的数据,并且引用的数组部分区间可能重叠
以上是golang 圣经中的一句话。深刻理解这句话对于日程编程非常有意义。
什么时候共享数据会被其他变量修改
1 2 3 4 5 6 7 8 |
|
运行结果
1 2 |
|
我们清楚的看到了数据共享,此时修改了a1 ,两位两个变量都被修改
什么时候不会修改
1 2 3 4 5 6 7 8 |
|
运行结果
1 2 |
|
可以虽然a1被修改,a2并没有修改。我们知道append函数会面临内存的重新分配。所以等a2进行append的时候,会重新申请内存空间,将原有数组拷贝然后增加如新值。也就是当append操作的时候,此时a2 不在和a1 共享内存了。
在对slice复制的时候,如果面临多个变量同时指向一个数组的时候,一定要考虑到数据的共享和内存的重新分配。
以上就是golang slice如何拷贝的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
24 goroutine channel实现并发和并行(一)
更多相关阅读请进入《golang》频道 >>

Go语言101
一个与时俱进的Go编程知识库。