Avatar ·

为什么 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 不行。