Go语言cap函数计算切片容量的原理是什么?

刚刚开始看Go语言,一直没想通Go的cap函数是怎么计算切片容量的。

就像下面的代码,没懂容量为什么一开始是4,后来又怎么变成的8?

麻烦懂的人帮忙解释一下,谢谢!

package main

import "fmt"

func main() {
        var x [5]int
        var a = x[1:4]

        fmt.Println(a)
        fmt.Println(len(a))
        fmt.Println(cap(a))

        a = append(a, 1, 2, 3)
        fmt.Println(a)
        fmt.Println(len(a))
        fmt.Println(cap(a))
}

输出:

[0 0 0]

3

4

[0 0 0 1 2 3]

6

8

2个回答

qq_21397217
Arvin ZHANG 多谢
3 年多之前 回复

append会智能的处理底层数组的容量增长,总容量小于1000的时候会翻倍的增加容量,大于1000的时候*1.25

立即提问