我们已经知道数组的长度是固定的,不能增加。切片长度是动态的,可以使用append函数将新元素添加到片中。append函数的定义是func append(s []T x...T) []T。
函数定义中的x...T,表示可变参数,参数类型为T,传入的参数数量可变,这种函数称为可变参数函数。
不过有一个问题可能困扰着你。如果切片的底层是数组,数组本身的长度是固定的,那么切片长度为什么可以是动态的呢?
当新元素被添加到切片中时,就会创建一个新的数组。将现有数组的元素复制到这个新数组中,并返回这个新数组的一个新切片引用。
现在新切片的容量变大了(具体增加多少,由go决定)。
来看一个例子:
也可以使用...符号将一个切片附加到另一个切片。关于此...操作符后续变参函数部分会有更多介绍。