切片的长度和容量

:::danger 容量是指底层数组的大小,长度可以使用的大小

:::

容量的用处在哪?

在与当你用 append 扩展长度时,如果新的长度小于容量,不会更换底层数组。

否则,go 会新申请一个底层数组,拷贝这边的值过去,把原来的数组丢掉。

也就是说,容量的用途是: 在数据拷贝和内存申请的消耗与内存占用之间提供一个权衡。

而长度,则是为了帮助你限制切片可用成员的数量,提供边界查询的。所以用 make 申请好空间后,需要注意不要越界【越 len 】

  1. num1 := []int{1, 2, 3, 4, 5}
  2. num2 := num1[1:2:4]
  3. fmt.Println(len(num2)) // 1
  4. fmt.Println(cap(num2)) //3

参考资料

go cap和len的区别_nzz_1214-CSDN博客