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
Go:内置制造-容量是否有影响_Go_Slice - Fatal编程技术网

Go:内置制造-容量是否有影响

Go:内置制造-容量是否有影响,go,slice,Go,Slice,考虑使用5个元素动态填充数组/切片。不多也不少 (1) 初始长度为0的切片 sl:=[]字符串{} 对于i:=0;i

考虑使用
5个
元素动态填充数组/切片。不多也不少

(1) 初始长度为0的切片
sl:=[]字符串{}
对于i:=0;i<5;i++{
sl=附加(sl,“abc”)
}
(2) 设置初始长度的切片,无容量
sl:=make([]字符串,5)
对于i:=0;i<5;i++{
s1[i]=“abc”
}
(3) 设置初始长度的切片,给定容量
sl:=make([]字符串,5,5)
对于i:=0;i<5;i++{
sl[i]=“abc”
}


我的感觉告诉我,1不是最好的解决方案,但我想知道为什么我会选择2而不是3,反之亦然?(性能方面)

首先,当您有关于性能的问题时,以及

第二,我看不出有什么不同。考虑到该守则

s := make([]int, 5)
fmt.Println(cap(s))

,你的#2和#3基本上是一样的。

不知道
cap
-这肯定很有帮助。谢谢:-)2)和3)完全相同。如果您想要一片len 20,但想要一个cap 200(允许180个元素的无分配附加),那么表3)非常有用。版本1)完全可以,除非您知道您的切片将增长到某个可评估的大范围。您忽略了(4)在哪里制作([]字符串,0,5)
,然后使用
附加
,如(1)所示。通常在容量设置更像是猜测/估计/上限的情况下,或者由于其他原因,使用
append
或在循环过程中增加切片长度比使用显式索引更方便的情况下进行。另一个旁注,(2)和(3)可以对i:=range sl
使用
sl := make([]string, 5)
for i := 0; i < 5; i++ {
    s1[i] = "abc"
}
sl := make([]string, 5, 5)
for i := 0; i < 5; i++ {
    sl[i] = "abc"
}
s := make([]int, 5)
fmt.Println(cap(s))