切片的个性

在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

正确的做法是将其初始化为长度相等的切片

这样咱们就能失去正确的后果