英文:
Go: builtin make - does the capacity make a difference
问题
考虑想要动态地填充一个包含恰好5
个元素的数组/切片。不多也不少。
#(1) 初始长度为0的切片
sl := []string{}
for i := 0; i < 5; i++ {
sl = append(sl, "abc")
}
#(2) 初始长度已设置,但没有容量限制的切片
sl := make([]string, 5)
for i := 0; i < 5; i++ {
sl[i] = "abc"
}
#(3) 初始长度已设置,并指定了容量的切片
sl := make([]string, 5, 5)
for i := 0; i < 5; i++ {
sl[i] = "abc"
}
我的直觉告诉我,#1 不是最佳解决方案,但我想知道为什么我会选择 #2 而不是 #3,或者反过来?(从性能角度考虑)
英文:
Consider wanting to dynamically fill an array/slice with exactly 5
elements. No more, and no less.
#(1) Slice with initial length 0
sl := []string{}
for i := 0; i < 5; i++ {
sl = append(sl, "abc")
}
#(2) Slice with initial length set, no capacity
sl := make([]string, 5)
for i := 0; i < 5; i++ {
s1[i] = "abc"
}
#(3) Slice with initial length set, capacity given
sl := make([]string, 5, 5)
for i := 0; i < 5; i++ {
sl[i] = "abc"
}
My feeling tells me that #1 is not the <i>best</i> solution, but I am wondering why I would choose #2 over #3 or vice versa? (performance-wise)
答案1
得分: 3
首先,每当你对性能有疑问时,可以使用 benchmark 和 profile。
其次,我在这里没有看到任何区别。考虑到这段代码
s := make([]int, 5)
fmt.Println(cap(s))
打印出5,你的第2点和第3点基本上是相同的。
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论