切片的长度和容量
:::danger
容量
是指底层数组的大小,长度
指可以使用的大小
:::
容量的用处在哪?
在与当你用 append
扩展长度时,如果新的长度小于容量,不会更换底层数组。
否则,go
会新申请一个底层数组,拷贝这边的值过去,把原来的数组丢掉。
也就是说,容量的用途是: 在数据拷贝和内存申请的消耗与内存占用之间提供一个权衡。
而长度,则是为了帮助你限制切片可用成员的数量,提供边界查询的。所以用 make 申请好空间后,需要注意不要越界【越 len 】
num1 := []int{1, 2, 3, 4, 5}
num2 := num1[1:2:4]
fmt.Println(len(num2)) // 1
fmt.Println(cap(num2)) //3
参考资料