Go 语言面试题
目录

Go 语言中如何复制切片?

· 约 2 分钟读完 · 第 21 / 175 章

推荐答案

在 Go 语言中,复制切片可以通过 copy 函数来实现。copy 函数会将源切片中的元素复制到目标切片中,并返回实际复制的元素个数。

本题详细解读

1. copy 函数的使用

copy 函数的签名如下:

  • dst 是目标切片,src 是源切片。
  • copy 函数会将 src 中的元素复制到 dst 中,复制的元素个数是 dst 和 src 中长度较小的那个。
  • 返回值是实际复制的元素个数。

2. 注意事项

  • 如果 dst 的长度小于 src 的长度,只会复制 dst 长度的元素。
  • 如果 dst 的长度大于 src 的长度,会复制 src 中的所有元素,dst 中多余的元素保持不变。
  • copy 函数不会自动扩展 dst 的容量,因此在使用 copy 之前,需要确保 dst 有足够的空间来容纳 src 中的元素。

3. 示例代码解析

  • src 是一个包含 5 个元素的切片。
  • dst 是一个与 src 长度相同的切片,使用 make 函数初始化。
  • copy(dst, src) 将 src 中的所有元素复制到 dst 中,并返回复制的元素个数 n。
  • 最终,dst 中的内容与 src 相同。

4. 其他复制方式

除了使用 copy 函数,还可以通过以下方式复制切片:

  • 直接赋值:dst := src,这种方式只是复制了切片的引用,底层数组是共享的。
  • 使用 append:dst := append([]int(nil), src...),这种方式会创建一个新的切片,并将 src 中的元素复制到新切片中。

然而,copy 函数是最直接和高效的方式,特别是在需要精确控制复制范围时。