Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang:生成函数和第三个参数_Go - Fatal编程技术网

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_因子的值,它将为您节省另一个内存分配