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
//输出结果
输出结果
按照扩容规则 新的容量大小应该为 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