go 原始容量大于1024 扩容机制问题求解

go 扩容问题


//情景二 :  如果需要的容量 小于 当前容量 * 2 且 当前容量 少于 1024

    s1 := make([]int, 1022, 1024) // 原有容量大于等于 1024 则 扩容规则为  oldcap + = oldcap *0.25  则结果应为  1280

    fmt.Printf("原始切片的长度 %d 切片容量 %d \n", len(s1), cap(s1))

    s1 = append(s1, 1, 2, 3)

    fmt.Printf("新切片的长度 %d 切片容量 %d \n", len(s1), cap(s1)) //但实际结果为 1536
    //输出结果

输出结果

img

按照扩容规则 新的容量大小应该为 1280 才对 但输出结果 新的容量大小为 1536

如果容量不超过1024时,扩容的时候会按照cap*2扩容,如果容量超过1024,扩容的时候会按照原来cap的1/2扩容
这个好像是某个版本的规则。
也有说规则变了:https://blog.csdn.net/xjj_513/article/details/122814835?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-122814835-blog-123170774.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-122814835-blog-123170774.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=1