append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数
append函数会改变slice所引用的数组的内容,从而影响到引用同一数组的其它slice。 但当slice中没有剩
余空间(即(cap-len) == 0)时,此时将动态分配新的数组空间。返回的slice数组指针将指向这个空间,而原
数组的内容将保持不变;其它引用此数组的slice则不受影响
下面的代码描述了从拷贝切片的 copy 方法和向切片追加新元素的 append 方法
package mainimport "fmt"func main() { var numbers []int printSlice(numbers) numbers = append(numbers, 0) printSlice(numbers) numbers = append(numbers, 1) printSlice(numbers) numbers = append(numbers, 2,3,4) printSlice(numbers) numbers1 := make([]int, len(numbers), (cap(numbers))*2) copy(numbers1,numbers) printSlice(numbers1) }func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%vn",len(x),cap(x),x)}运行结果
len=0 cap=0 slice=[]len=1 cap=2 slice=[0]len=2 cap=2 slice=[0 1]len=5 cap=8 slice=[0 1 2 3 4]len=5 cap=12 slice=[0 1 2 3 4]
numbers1与numbers两者不存在联系,numbers发生变化时,numbers1是不会随着变化的。也就是说copy方法是不会建立两个切片的联系的



