26_append 函数的使用

append 函数的使用
1.内置函数append用来将元素追加到slice的后面

2.如果使用append追加时,原底层数组容量够时,还会使用原来的底层数组,并把新的元素复制到原数组的后面,
  如果slice的容量不够时,就把原来的数组扩展一倍,并把原来的slice数组复制到新的扩充数组中,然后再
  将新元素追加到数组的后面.

3.每次数组容量扩展时,通过扩展一倍的容量来减少内存的分配的次数,这样也保证了追加一个元素所消耗的是固定时间.

4.通常情况下,我们并不清楚一次append调用会不会导致一次新的内存分配,所以我们不能假设原来的slice和
  新用append后的结果slice指向同一个底层数组,也无法证明它们指的是不同数组所以我们通常将append的
  调用结果再次赋值传入append函数的slice.

5.append函数可以同时给slice添加多个元素,甚至添加另一个slice里的所有元素.
例如:var x []int x=append(x,1) x=append(x,2) x=append(x,x...)//1,2
//其中(...)表示函数可以接受可变长度参数列表

具体使用代码:

package main

import "fmt"

func main() {
	//定义并创建一个切片
	s1 := []int{1, 2, 3}
	fmt.Println("原s1:", s1)
	//append(s1, 5) // append(s1, 5) evaluated but not used ,不能够单独使用,必须把它赋给一个切片变量
	s1 = append(s1, 5)
	fmt.Println("新s1:", s1)

	//通过make内置函数创建一个且切片,一般用for循环进行复制
	s2 := make([]int, 10)
	fmt.Println("原 s2:", s2) // s2: [0 0 0 0 0 0 0 0 0 0]
	s2 = append(s2, 1)
	fmt.Println("新 s2:", s2) // s2: [0 0 0 0 0 0 0 0 0 0 1]在后面加一个
	for i := 0; i < len(s2); i++ {
		s2[i] = i
	}
	fmt.Println("最新 s2:", s2) 

	//append 函数会智能的在底层数组容量上增长,一旦超越了原来的底层数组的容量,通常是以1倍容量重新分配底层数组
	s3 := make([]int, 2)
	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 2 cap(s3): 2
	s3 = append(s3, 1)
	fmt.Println(s3)                                       //[0 0 1]
	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 2 cap(s3): 4
	s3 = append(s3, 1)
	s3 = append(s3, 1)
	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 5 cap(s3): 8

}
每天的价值就是不停息的前进!!!
原文地址:https://www.cnblogs.com/zhaopp/p/11486104.html