最近看golang , 网上讲最多的是append扩容切片, 会以二倍增加容量, 经过测试证明在大多数情况下是以二倍增长, 但是有极少数情况并不是二倍增长 , 而是切片长度+1 增加容量
结论:
append 对切片扩容, 如果以二倍增加也存放不下的情况以len(slice) +1 扩容
测试代码
package main
import (
"fmt"
"math/rand"
"time"
)
// 获到一个随机长度切片
func getRandLengArr(max int) (slice []int) {
rand.Seed(time.Now().UnixNano())
arrLen := rand.Intn(max-1) + 1
for i := 0; i < arrLen; i++ {
slice = append(slice, rand.Intn(100))
}
return
}
// 测试append扩容特点
// 要多运行几次,会发现, 有极少数情况并不是以2倍的增长扩容
func main() {
slice := make([]int, 0, 0)
oldCap := cap(slice)
for i := 0; i < 10; i++ {
slice = append(slice, getRandLengArr(5)...)
if currCap := cap(slice); currCap > oldCap {
if oldCap == 0 {
fmt.Printf("currlen=%d oldcap->currcap:%d->%d 初次增长\n", len(slice), oldCap, currCap)
} else if currCap == len(slice)+