一.copy函数

  • 通过copy函数可以把一个切片内容复制到另一个切片中
  • Go语言标准库源码定义如下

    • 第一个参数是目标切片,接收第二个参数内容
    • 第二个参数是源切片,把内容拷贝到第一个参数中
      1. // The copy built-in function copies elements from a source slice into a
      2. // destination slice. (As a special case, it also will copy bytes from a
      3. // string to a slice of bytes.) The source and destination may overlap. Copy
      4. // returns the number of elements copied, which will be the minimum of
      5. // len(src) and len(dst).
      6. func copy(dst, src []Type) int
  • 拷贝时严格按照脚标进行拷贝.且不会对目标切片进行扩容

    二.代码示例

  • 把短切片拷贝到长切片中

    1. s1:=[]int {1,2}
    2. s2:=[]int {3,4,5,6}
    3. copy(s2,s1)
    4. fmt.Println(s1)//输出:[1 2]
    5. fmt.Println(s2)//输出:[1 2 5 6]
  • 把长切片拷贝到短切片中

    1. s1:=[]int {1,2}
    2. s2:=[]int {3,4,5,6}
    3. copy(s1,s2)
    4. fmt.Println(s1)//输出:[3 4]
    5. fmt.Println(s2)//输出:[3 4 5 6]
  • 把切片片段拷贝到切片中

    1. s1:=[]int {1,2}
    2. s2:=[]int {3,4,5,6}
    3. copy(s1,s2[1:])
    4. fmt.Println(s1)//输出:[4 5]
    5. fmt.Println(s2)//输出:[3 4 5 6]

三.使用copy完成删除元素

  • 使用copy函数可以保证原切片内容不变
    1. s := []int{1, 2, 3, 4, 5, 6, 7}
    2. n := 2 //要删除元素的索引
    3. newSlice := make([]int, n)
    4. copy(newSlice, s[0:n])
    5. newSlice = append(newSlice, s[n+1:]...)
    6. fmt.Println(s) //原切片不变
    7. fmt.Println(newSlice) //删除指定元素后的切片