slice的容量是怎回事?

slice的长度我是知道,容量是怎么回事?

共 4 个回复


lvxiaorun

容量是空间,每次有新的内容,容量不够的时候就会变为以前的两倍。

# 0

dyllen

@lvxiaorun 是自己测试了一下,这个容量是自动的,最小是10,后面会用10的倍数增加。

# 1

fanyang

//长度是第二个参数,容量是三个参数
test := make([]string, 10, 11)
//len计算长度,cap计算容量
fmt.Println(len(test), cap(test))//10 11
//使用append追加元素会存放到空闲区域
test = append(test, "h")
fmt.Println(len(test), cap(test))//11 11
//如果超出容量值将扩展容量为原值*2
test = append(test, "h")
fmt.Println(len(test), cap(test))//12 22
# 2

aaa

底层数组的事, 容量不够了就会新建底层数组,并把数据拷贝到新底层数组中

# 3