面试题答案
一键面试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。
源切片和目标切片容量不一致时的情况
- 目标切片容量小于源切片:
copy
函数只会复制目标切片容量所能容纳的元素个数。例如上述示例中,dst
切片容量为3,所以只会复制src
切片的前3个元素。 - 目标切片容量大于源切片:
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
函数不会改变目标切片的容量,它只是在目标切片现有容量范围内尽可能多地复制源切片的元素。