切片
- 切片与数组区别
- 切片在函数之间传递是值传递还是引用传递
- append方法是如何进行拷贝的,会产生双倍空间吗
- append函数与copy函数不同
- 子切片修改,会影响父切片的数据
- 存在的陷阱
- Append扩容隐藏的坑
- 当把slice传给一个函数时,对slice的结构体发生的值传递,而slice中指向数据内容的地址没有变
- 切片操作并不复制切片指向的元素。它创建一个新的切片并复用原来切片的底层数组。 这使得切片操作和数组索引一样高效。因此,通过一个新切片修改元素会影响到原始切片的对应元素
- 切片操作并不会复制底层的数组。整个数组将被保存在内存中,直到它不再被引用。 有时候可能会因为一个小的内存引用导致保存所有的数据,导致 GC 不能释放数组的空间;只用到少数几个字节却导致整个文件的内容都一直保存在内存里,只能通过切片拷贝修复
- 在使用append()函数给slice中添加元素时,slice的初始大小可以为0,也就是len可以为0。每次向slice中append的时候,如果容量cap不够,会自动对slice进行扩容,也就是改变slice的cap的大小。
- 而在使用copy()函数操作slice时,如果slice的大小为0时,会不添加任何元素,不会自动增加slice的容量大小。
1 | package main |
append vs copy
1 | package append_vs_copy |