golang中len与cap的区别

你知道好坏,让自己朝着正确的方向转变…

区别

len()可以用来查看数组或slice的长度

cap()可以用来查看数组或slice的容量

在数组中由于长度固定不可变,因此len(arr)和cap(arr)的输出永远相同

在slice中,len(sli)表示可见元素有几个(也即直接打印元素看到的元素个数),而cap(sli)表示所有元素有几个,比如:

1
2
3
4
5
arr := []int{2, 3, 5, 7, 11, 13}
sli := arr[1:4]
fmt.Println(sli)
fmt.Println(len(sli))
fmt.Println(cap(sli))

输出

1
2
3
[3 5 7]
3
5

查看一共有几个元素的方法:

1
fmt.Println(sli[:cap(sli)])

输出

1
[3 5 7 11 13]

拓展

切片拥有 长度 和 容量。

切片的长度就是它所包含的元素个数。

切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。

切片概念是只包含左边元素不包含右边元素

最难理解的是切片的容量,我们可以把容量当做成总长度减去左指针走过的元素值,比如:

1
2
3
s[:0] ——> cap = 6 - 0 =6

s[2:] ——> cap = 6 - 2 = 4