猿问

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

我是golang的新手,在运行此代码片段时,我将len设置为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


眼眸繁星
浏览 71回答 2
2回答

慕娘9325324

这将创建一个长度为 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

创建长度为 2 的切片,并向其追加了两个元素,因此长度为 4。您可能要做的是创建容量为 2 的切片:var k = make([]string,0,len(m))
随时随地看视频慕课网APP

相关分类

Go
我要回答