切片的特性
在go的切片中
对基于同一数组的不同切片进行操作的时候,实质上是在同一数组空间进行操作的
如果我们在复制切片的时候
想当然的使用下面的语句
var nums = []int{1, 2, 3}
copy :=nums
就有可能导致bug的出现
让我们看看这个例子
我们本希望对副本copy进行操作而不改变nums的值
为此我们新建了变量copy
然而结果为
正确的做法是使用copy函数
对于copy函数的使用
我们需要注意参数的长度
如果我们使用这样的copy
本以为完成了复制操作
但其实
结果如下
因为co被声明时默认初始化为nil
由于copy函数的特性,copy操作不会为co扩大容量
在完成了copy操作之后将仍为nil
这样我们如果以为完成了copy操作直接使用该切片就会发生异常
例如完成交换操作co[1], co[2] = co[2], co[1]
将会提示下标越界
panic: runtime error: index out of range [1] with length 0
正确的做法是将其初始化为长度相等的切片
这样我们就能得到正确的结果
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。