为什么 copy() 不能复制 Go 中的 slice?还是我做错了什么?
大家好!我最近开始学习 Go,在处理 slice 时遇到了一个令人困惑的问题。我需要将一个 slice 复制到另一个 slice,以便之后可以独立于原 slice 修改副本。我了解到有一个内置函数 `copy()` 可以用于此目的。
我写了如下代码:
```go
package main
import "fmt"
func main() {
original := []int{1, 2, 3, 4, 5}
var copySlice []int
copy(copySlice, original)
fmt.Println("original:", original)
fmt.Println("copy:", copySlice)
}
```
但输出结果是一个空的 slice!`copySlice` 仍然是 `[]`。我原本期望在 `copy()` 之后,`copySlice` 会包含与 `original` 相同的元素。
然后我尝试了另一种方法——先声明一个具有长度但没有值的 slice:
```go
copySlice2 := make([]int, len(original))
copy(copySlice2, original)
```
这次成功了!但为什么第一种方法不起作用呢?文档中说 `copy` 会复制元素,但没有解释为什么空的 slice 不行。