ошибка при назначении значений для структуры внутри структуры golang - PullRequest
0 голосов
/ 05 мая 2018

Я сталкивался с такой ситуацией, когда пытался присвоить значения структуре внутри структуры. Нет ошибки компилятора, но он запускает панику при запуске. Есть ли у 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 голосов
/ 05 мая 2018

Значением по умолчанию для среза является 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...