go len 与 cap 的区别

为了搞懂这个问题,先看一段代码:

package main

import "fmt"

func main() {
	s := []int{2, 3, 5, 7, 11, 13}
	printSlice(s)

	s = s[:0]
	printSlice(s)

	s = s[:4]
	printSlice(s)

	s = s[2:]
	printSlice(s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

结果:

len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]

 

解析:

len 长度是当前元素个数 cap 长度是底层元素个数

s := []int{2, 3, 5, 7, 11, 13}    printSlice(s) len: 6 cap:6 正确

s = s[:0]     len: 0 cap: 6 目前就只有0个元素,底层数组还是6个 printSlice(s)

s = s[:4]     printSlice(s) len: 4 cap:6 目前是4个元素,底层还是6个

s = s[2:]     printSlice(s) len: 2 cap: 4 目前是2个元素,底层元素是从第一个元素往后数的,目前是4

从上可以看出:

  • len 计算的是当前数组元素的个数,
  • cap计算的是当前切片开始位到数组最后一个元素的个数

 

posted @ 2022-09-08 15:25  萤huo虫  阅读(350)  评论(0编辑  收藏  举报