Go 切片 cap 函数为何返回 6 而不是 5?
在给出的代码中,append 函数被用于向切片 s 添加多个整数。在添加 5 个整数后,切片的 cap 却返回了 6,而不是预期的 5。本文将探讨造成这个现象的原因。
切片 cap 函数返回的是切片底层数组的容量,即其可以容纳的元素数量。在 Go 语言中,cap >= len,即容量总是大于或等于长度。
在代码中,当添加第一个元素时,cap 被设置为 1,因为底层数组的容量至少需要能够容纳一个元素。之后,每一次追加操作都会检查底层数组的容量是否足够。如果容量不足,底层数组的容量将会翻倍。
在添加 5 个整数后,cap 返回 6,表明底层数组的容量为 6。这是因为当追加到长度为 4 的切片时,底层数组的容量不足以容纳新的元素。因此,容量被翻倍为 8,而 cap 函数返回了 6,这是切片当前容量的较小值。