我是golang的新手,在运行此代码片段时,我将len设置为4,试图理解为什么会这样?package mainimport "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
2 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
这将创建一个长度为 2 的切片(此处为 2):len(m)
var k = make([]string, len(m))
这增加了两个元素,总共4个:
for key, _ := range m {
k = append(k, key)
}
如果要预先分配切片,则需要提供长度为零以及所需的容量:
var k = make([]string, 0, len(m))
这在 Tour of Go 中提供了一些示例。
慕田峪7331174
TA贡献1828条经验 获得超13个赞
创建长度为 2 的切片,并向其追加了两个元素,因此长度为 4。
您可能要做的是创建容量为 2 的切片:
var k = make([]string,0,len(m))
- 2 回答
- 0 关注
- 70 浏览
添加回答
举报
0/150
提交
取消