错误在struct golang中为struct赋值

时间:2018-05-05 19:14:21

标签: go struct

我遇到过这种情况,我试图将值赋给结构中的结构。没有编译器错误,但运行它时会出现混乱。 Go有不同的方法来处理这种数据结构吗?

package main

import (
    "fmt"
)

type Label struct {
    ID     int
    Labels []struct {
        ID   int
        Name string
    }
}

func main() {
    l := Label{}
    l.ID = 100

    l.Labels[0].ID = 200
    l.Labels[0].Name = "me"

    fmt.Println(l.ID)
    fmt.Println(l.Labels[0].ID)
    fmt.Println(l.Labels[0].Name)
}

https://play.golang.org/p/IiuXpaDvF1W

提前致谢。

1 个答案:

答案 0 :(得分:1)

切片的默认值为nil,因此它没有元素,并且您无法分配到索引0,因为它尚不存在。

您可以使用append将新元素添加到该切片:

l.Labels = append(l.Labels, struct{
    ID   int
    Name string
}{
    ID:   200,
    Name: "me",
})

https://play.golang.org/p/uAWdQdh0Ov7

此外,您在此处使用内联/匿名结构意味着您需要在append时重新声明该类型。考虑添加另一个声明的类型:

type SubLabel struct {
    ID   int
    Name string
}

type Label struct {
    ID     int
    Labels []SubLabel
}

// ...

l.Labels = append(l.Labels, SubLabel{
    ID:   200,
    Name: "me",
})

https://play.golang.org/p/4idibGH6Wzd