英文:
why the length of this go slice is 4 and why the output has the space in slice?
问题
我是你的中文翻译助手,以下是你提供的代码的翻译:
我刚开始学习golang,在运行这段代码时,我得到的长度为4,想要理解为什么会这样?
package main
import "fmt"
type phone struct {
model string
camera Camera
ram int
}
type Camera struct {
lens string
aparature int
}
func main() {
var m = make(map[string]phone)
myphn1 := phone{model: "iphone", camera: Camera{"20", 4}, ram: 6}
myphn2 := phone{model: "pixel", camera: Camera{"50", 2}, ram: 6}
m["myphn1"] = myphn1
m["myphn2"] = myphn2
var k = make([]string, len(m))
for key, _ := range m {
k = append(k, key)
}
fmt.Println(k)
fmt.Println(len(k))
}
我理解这段代码在创建时会增加2个大小,但在打印时会得到类似这样的结果,答案中的空间是为2个未分配的条目保留的吗?
[ myphn2 myphn1]
4
希望对你有帮助!
英文:
I am new to golang and while running this code snippet I am getting the len as 4, trying to understand why so ?
package main
import "fmt"
type phone struct {
model string
camera Camera
ram int
}
type Camera struct {
lens string
aparature int
}
func main() {
var m = make(map[string]phone)
myphn1 := phone{model: "iphone", camera: Camera{"20", 4}, ram: 6}
myphn2 := phone{model: "pixel", camera: Camera{"50", 2}, ram: 6}
m["myphn1"] = myphn1
m["myphn2"] = myphn2
var k = make([]string, len(m))
for key, _ := range m {
k = append(k, key)
}
fmt.Println(k)
fmt.Println(len(k))
}
I understand this adds size of 2 while creating, but while printing it gives somelike this , is the space in answer for 2 unallocated entries ?
[ myphn2 myphn1]
4
答案1
得分: 3
这里创建了一个长度为2的切片(len(m)
在这里是2):
var k = make([]string, len(m))
这里添加了两个元素,总共有4个:
for key, _ := range m {
k = append(k, key)
}
如果你想要预分配一个切片,你需要提供一个长度为零和所需容量的参数:
var k = make([]string, 0, len(m))
这在Go之旅的示例中有详细说明。
英文:
This creates a slice of length 2 (len(m)
is 2 here):
var k = make([]string, len(m))
This adds two elements to it, for a total of 4:
for key, _ := range m {
k = append(k, key)
}
If you want to preallocate a slice, you need to provide a length of zero along with the desired capacity:
var k = make([]string, 0, len(m))
This is covered with examples in the Tour of Go.
答案2
得分: 2
你创建了一个长度为2的切片,并向其追加了两个元素,所以长度变为4。
你可能想要创建一个容量为2的切片:
var k = make([]string, 0, len(m))
英文:
You create a slice with length 2, and appended two more elements to it, so the length is 4.
what you probably want to do is to create a slice with capacity 2:
var k = make([]string,0,len(m))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论