Golang:生成函数和第三个参数
以下两者之间的区别是什么:Golang:生成函数和第三个参数,go,Go,以下两者之间的区别是什么: x := make([]int, 5, 10) x := make([]int, 5) x := [5]int{} 我知道make分配一个数组并返回一个引用该数组的切片。我不明白在哪里可以用 我找不到一个很好的例子来说明这种情况。x:=make([]int,5)制作长度为5、容量为5(与长度相同)的int切片 x:=make([]int,5,10)make长度为5,容量为10的int切片 x:=[5]int{}生成长度为5的int数组
x := make([]int, 5, 10)
x := make([]int, 5)
x := [5]int{}
我知道make
分配一个数组并返回一个引用该数组的切片。我不明白在哪里可以用
我找不到一个很好的例子来说明这种情况。x:=make([]int,5)
制作长度为5、容量为5(与长度相同)的int
切片
x:=make([]int,5,10)
make长度为5,容量为10的int
切片
x:=[5]int{}
生成长度为5的int
数组
片
若您需要使用append
函数追加的项目多于切片的容量,go运行时将分配新的底层数组并将现有数组复制到其中。所以,若您知道片的估计长度,最好使用显式容量声明。它将在开始时为基础阵列消耗更多内存,但为许多分配和阵列复制占用安全的cpu时间。使用
每次
cap
值更改时,都会分配新数组
阵列
数组大小是固定的,所以如果您需要增加数组,您必须创建一个具有新长度的新数组,并自己将旧数组复制到其中
有一些关于go中的切片和数组的优秀文章:第二行将在开始时分配10 int的内存,但返回5 int的一部分。第二行并不代表更少的内存,如果您需要将片扩展到任何不超过10*load_因子的值,它将为您节省另一个内存分配