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))