不用引用直接使用
常用函数
append
func append(sliece []Tpye, elems ...Type)[]Type
直接再slice后添加单个元素
append使用要点
- append()用来将元素添加到切片末尾并返回结果。 调用append函数必须用原来的切片变量接收返回值
- append追加元素,如果slice还有容量的话,就会将新的元素放在原来slice后面的剩余空间里,当底层数组装不下的时候,Go就会创建新的底层数组来保存这个切片,slice地址也随之改变。
- 分配了新的地址后,再把原来slice中的元素逐个拷贝到新的slice中,并返回。
追加一个元素
slice = append(slice,elem1,elem2)
追加一个切片
slice = append(slice,anotherSlice...)
使用make创建切片,用append常犯错误
- make创建切片,有默认长度,就有默认值。
- 当元素超过make创建时设的容量10时,原底层数组装不下,就会换一段新的连续的地址来存放元素。
举例
var a = make([]int, 5, 10)//make([]int, 10)也会给初值
fmt.Println(a)
fmt.Printf("%p\n",a)
for i := 0; i <10; i++ {
a = append(a,i)
//%p 打印切片地址
fmt.Printf("%v,%p,cap(a):%d\n",a,a,cap(a))
}
make有初值,输出为
[0 0 0 0 0]
0xc0000180a0
[0 0 0 0 0 0],0xc0000180a0,cap(a):10
[0 0 0 0 0 0 1],0xc0000180a0,cap(a):10
[0 0 0 0 0 0 1 2],0xc0000180a0,cap(a):10
[0 0 0 0 0 0 1 2 3],0xc0000180a0,cap(a):10
[0 0 0 0 0 0 1 2 3 4],0xc0000180a0,cap(a):10
[0 0 0 0 0 0 1 2 3 4 5],0xc00007c000,cap(a):20
[0 0 0 0 0 0 1 2 3 4 5 6],0xc00007c000,cap(a):20
[0 0 0 0 0 0 1 2 3 4 5 6 7],0xc00007c000,cap(a):20
[0 0 0 0 0 0 1 2 3 4 5 6 7 8],0xc00007c000,cap(a):20
[0 0 0 0 0 0 1 2 3 4 5 6 7 8 9],0xc00007c000,cap(a):20
###删除元素
如果要在切片s中删除一个元素,被删除的元素索引为index
s = append ( s[ :index ], s[ index+1: ] )
len
返回数组,切片,字符串,通道的长度
panic
抛出一个panic异常
new和make
new和make区别
- make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据
- new分配返回的是指针,T;make返回的是T
- new分配的空间被清零,make分配后会进行初始化(nil和空[]的区别)