本文共 884 字,大约阅读时间需要 2 分钟。
数组的长度是固定的,而切片的长度则是不固定的。切片可以通过切片操作从数组中获取子数组,具备动态的长度特性。
切片的定义方式与数组类似,但不需要预先指定长度:
a := [5]int{ // 数组定义,必须有长度 1, 2, 3, 4, 5,}s := []int{ // 切片定义,没有长度 1, 2, 3, 4, 5,} 使用 append 函数添加数据时,如果切片的容量已满,会自动扩容。扩容策略如下:
切片容量的扩容总是以偶数为单位进行,确保内存对齐。
s[0] // 获取索引 0 处的元素
s[:] // 获取整个切片
low 到末尾:s[low:] // 例如:s[2:] 获取索引 2 及之后的元素
0 到 high:s[:high] // 例如:s[:3] 获取前 3 个元素
low 到 high:s[low:high] // 例如:s[1:4] 获取索引 1 到 3 的元素
s[low:high:max] // 例如:s[1:4:10] 获取索引 1 到 3 的元素,切片容量为 10
len(s):切片的当前长度,总是小于等于 cap(s)。cap(s):切片的当前容量,总是大于等于 len(s)。使用 copy 函数进行深拷贝操作:
copy(s, newSlice) // 将 newSlice 的内容深拷贝到 s 中
在 Golang 中,数组是值传递,而切片是引用传递。因此,修改切片会直接反映到原数组中。
切片是 Golang 中非常灵活的数据结构,支持动态长度和扩容机制。通过合理使用切片操作和扩容策略,可以充分发挥其性能优势。
转载地址:http://xwrfk.baihongyu.com/