有什么区别:
x := make([]int, 5, 10)
x := make([]int, 5)
x := [5]int{}
Run Code Online (Sandbox Code Playgroud)
我知道make分配一个数组并返回一个引用该数组的切片.我不明白它可以在哪里使用?
我找不到一个能够澄清情况的好例子.
x := make([]int, 5)使切片的int长度为5和容量5(同长度).
x := make([]int, 5, 10)使切片的int长度为5和10的容量.
x := [5]int{}使得阵列的int长度为5.
如果你需要使用函数附加更多项而不是slice的容量append,那么运行时将分配新的底层数组并将现有的数组复制到其中.因此,如果您了解切片的估计长度,最好使用显式容量声明.它会在开始时为底层数组消耗更多内存,但是许多分配和数组复制的安全cpu时间.
您可以使用该简单测试来探索方式len和cap更改append,Go playground
每次cap更改值时,都会分配新数组
数组大小是固定的,因此如果您需要增长数组,则必须创建具有新长度的新数组,并将您的旧数组复制到自己的数组中.
关于切片和数组有一些很棒的文章:
http://blog.golang.org/go-slices-usage-and-internals
http://blog.golang.org/slices