fmt.Println(slice1, len(slice1), cap(slice1))
fmt.Println(slice2, len(slice2), cap(slice2))
fmt.Println(slice3, len(slice3), cap(slice3))
打印结果:
[0 0 0 0 0] 5 5
[0 0 0 0 0] 5 10
[1 2 3 4 5] 5 5
与数组相同,slice操作不能超出len指定的范围。
slice := make([]int, 5, 10)
slice[3] = 10 //正确
slice[8] = 8 //错误 ,索引超出范围
4 切片的遍历
切片的遍历与数组的遍历方式相同。
5 切片不能比较
与数组不同的是slice之间不能比较,因此我们不能使用==操作符来判断两个slice是否含有全部相等的元素。不过标准库提供了高度优化的bytes.Equal函数两个字节型slice是否相等,但是对于其它类型的slice,我们必须自己展开每个元素进行比较。
切片可遍历,可修改,不可比较
6 判断切片是否为空
使用len(s)==0来判断一个slice是否为空。
7 追加元素
内置的append函数用于向slice追加元素。可以直接追加元素,也可以追加一个slice。注意参数slice后有...。否则有语法错误。因为append()函数的语义是从第二个参数开始都应该是待附加的元素。slice后加...意味将slice的元素全部打散后传入。数组切片会自动处理存储空间不足的问题。如果追加的内容长度超过当前已分配的存储空间(即cap()调用返回的信息),数组切片会自动分配一块足够大的内存。
slice := make([]int, 5, 10)
slice = append(slice, 1, 2, 3)
fmt.Println(slice)
slice2 := []int{4, 5, 6}
slice = append(slice, slice2...)
fmt.Println(slice)
打印结果:
[0 0 0 0 0 1 2 3]
[0 0 0 0 0 1 2 3 4 5 6]
8 切片复制
内置的copy函数用于数组切片的复制。复制时无需考虑目标数组和源数组的长度。