MST

星途 面试题库

面试题:Go语言中切片复制的常见方式及注意点

在Go语言里,描述一下使用`copy`函数进行切片复制的基本用法,并且说明如果源切片和目标切片的容量不一致时会发生什么情况?
39.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

copy函数进行切片复制的基本用法

在Go语言中,copy函数用于将源切片的内容复制到目标切片中。其函数签名为:

func copy(dst, src []Type) int

其中,dst是目标切片,src是源切片,Type是切片元素的类型。copy函数会返回实际复制的元素个数。

示例代码如下:

package main

import (
    "fmt"
)

func main() {
    src := []int{1, 2, 3, 4, 5}
    dst := make([]int, 3)

    n := copy(dst, src)
    fmt.Println("Copied", n, "elements")
    fmt.Println("dst:", dst)
}

在上述代码中,src切片有5个元素,dst切片的容量为3。copy函数将src切片的前3个元素复制到dst切片中,并返回实际复制的元素个数3。

源切片和目标切片容量不一致时的情况

  1. 目标切片容量小于源切片copy函数只会复制目标切片容量所能容纳的元素个数。例如上述示例中,dst切片容量为3,所以只会复制src切片的前3个元素。
  2. 目标切片容量大于源切片copy函数会复制源切片的所有元素,直到源切片的元素全部复制完成。例如:
package main

import (
    "fmt"
)

func main() {
    src := []int{1, 2, 3}
    dst := make([]int, 5)

    n := copy(dst, src)
    fmt.Println("Copied", n, "elements")
    fmt.Println("dst:", dst)
}

在这个例子中,src切片有3个元素,dst切片容量为5。copy函数会将src的3个元素全部复制到dst切片的前3个位置,dst切片剩余的两个位置仍保持其零值(对于int类型,零值为0)。

总结来说,copy函数不会改变目标切片的容量,它只是在目标切片现有容量范围内尽可能多地复制源切片的元素。