为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个go切片的长度是4,为什么输出在切片中有空间?

为什么这个go切片的长度是4,为什么输出在切片中有空间?

Go
眼眸繁星 2022-09-05 09:14:42
我是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 中提供了一些示例。


查看完整回答
反对 回复 2022-09-05
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

创建长度为 2 的切片,并向其追加了两个元素,因此长度为 4。

您可能要做的是创建容量为 2 的切片:

var k = make([]string,0,len(m))


查看完整回答
反对 回复 2022-09-05
  • 2 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信