乐趣区

关于golang:golang语法小心切片的复制

切片的个性

在 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

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

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

退出移动版