Menu
CoddyTech

复制切片

Coddy Go 中的切片和映射 课程的第 13 课,共 21 课。

在 Go 中,有一些可以用于切片的内置函数。我们在上一课中已经使用过其中一个,也就是 <strong>append</strong> 函数。它可以让我们向已有的切片添加元素。我们把这些函数称为辅助函数,你可以把这一点加入 Go 中数组和切片的区别:数组没有这些函数。

本课要介绍 <strong>copy</strong> 函数,它可以让我们复制切片,用法如下:

str := []string{"Python", "Golang", "Java", "TypeScript"}
newStr := make([]string, 4)
copy(newStr, str)
fmt.Println(newStr)

输出如下:

[Python Golang Java TypeScript]

使用 <strong>copy</strong> 函数,我们可以把元素从 <strong>str</strong> 切片复制到 <strong>newStr</strong> 切片。语法如下:<strong>copy(destination, source)</strong>。

如果新切片的容量小于源切片,会怎样呢?来看一个例子:

str := []string{"Python", "Golang", "Java", "TypeScript"}
newStr := make([]string, 3)
copy(newStr, str)
fmt.Println(newStr)

运行这段代码后,输出如下:

[Python Golang Java]

因为新切片的容量是 3,所以只能容纳 3 个元素。

再来看一个相反的例子:

str := []int{23, 34, 56, 77}
newStr := make([]int, 6)
copy(newStr, str)
fmt.Println(newStr)

这里,新切片的容量大于源切片,因此会复制所有元素,其余位置会使用默认值。对于 int 类型,默认值是 0:

[23 34 56 77 0 0]
challenge icon

挑战

简单

编写一个程序,接收两个切片,并将它们合并到一个新切片中,然后将其打印到屏幕上。

在给定的代码中,我们定义了两个整数切片。

这里你需要使用切片运算符和copy 函数。

如果你需要更多帮助,请参考提示。

亲手试试

package main

import (
	"fmt"
)

func main() {
    // 两个切片,不要修改!
	str := []int{1, 2, 3, 4}
	str2 := []int{5, 6, 7, 8}
	// 定义新切片 
 
    // 复制元素
 
	// 使用切片运算符复制
	 
    // 打印新切片
	fmt.Println()

}

Go 中的切片和映射中的所有课

自己练习: Go 在线编译器