Go 语言是如何实现切片扩容的?

  1. func main() {
  2. arr := make([]int, 0)
  3. for i := 0; i < 2000; i++ {
  4. fmt.Println("len为", len(arr), "cap为", cap(arr))
  5. arr = append(arr, i)
  6. }
  7. }

我们可以看下结果

依次是 0,1,2,4,8,16,32,64,128,256,512,1024

但到了1024之后,就变成了 1024,1280,1696,2304

每次都是扩容了四分之一左右