基础
- 数组的长度是固定的,切片的长度是不固定的
a:=[5]int{ } // 数组定义,必须有长度
s:=[ ]int{ }//切片定义,没有长度
append
slice = append(slice, 456)
slice = append(slice, 1, 2, 3)
len&cap
- 在使用appned进行数据添加时 如果长度超出容量 容量会自动扩容
- 一般扩容方式为上一次 容量*2 如果超过1024字节 每次扩容上一次的1/4
- 容量扩容每次都是偶数
//len(slice) 计算切片的长度
//cap(slice) 计算切片的容量,就是存了多少数据
截取
操作 | 含义 |
---|---|
s[n] | 切片s中索引位置为n的项 |
s[:] | 从切片s的索引位置0到len(s)-1处所获得的切片 |
s[low:] | 从切片s的索引位置low到len(s)-1处所获得的切片 |
s[:high] | 从切片s的索引位置0到high处所获得的切片,len=high |
s[low:high] | 从切片s的索引位置low到high处所获得的切片,len=high-low |
s[low:high:max] | 从切片s的索引位置low到high处所获得的切片,len=high-low,cap=max-low |
len(s) | 切片s的长度,总是<=cap(s) |
cap(s) | 切片s的容量,总是>=len(s) |
copy
将一块内存中的内容拷贝到另一块中,深拷贝
copy(s, slice)
其他
1.数组是值传递,而切片是引用传递