Golang встроенный тип структуры

У меня есть эти типы:

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

Я могу использовать использование v := NamedValue{Name: "fine", Value: 33}, но я не умею пользоваться e := ErrorValue{Name: "alpha", Value: 123, Error: err}

Кажется, что встраивание синтаксиса было в порядке, но его использование не работает?

2 ответа

Решение

Встроенные типы - это (неназванные) поля, на которые ссылается неквалифицированное имя типа.

Spec: Типы конструкций:

Поле, объявленное с типом, но без явного имени поля, является анонимным полем, также называемым встроенным полем или встраиванием типа в структуру. В качестве имени типа должен быть указан внедренный тип. T или как указатель на имя неинтерфейсного типа *T, а также T Сам по себе не может быть указателем типа. Неквалифицированное имя типа действует как имя поля.

Так что постарайтесь:

e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}

Также работает, если вы опустите имена полей в составном литерале:

e := ErrorValue{NamedValue{"fine", 33}, err}

Попробуйте примеры на игровой площадке Go.

Для глубоко вложенных структур синтаксис принятого ответа немного подробен. Например, это:

package main

import (
    "fmt"
)

type Alternative struct {
    Question
    AlternativeName string
}

type Question struct {
    Questionnaire
    QuestionName  string
}

type Questionnaire struct {
    QuestionnaireName string
}

func main() {
    a := Alternative{
        Question: Question{
            Questionnaire: Questionnaire{
                QuestionnaireName: "q",
            },
        },
    }
    fmt.Printf("%v", a)
}

(Иди на игровую площадку)

Можно было бы переписать так:

a := Alternative{}
a.QuestionnaireName = "q"

Помимо чудесного ответа от icza.

Вы можете просто сделать это:

v := NamedValue{Name: "fine", Value: 33}
e := ErrorValue{NamedValue:v, Error: err}

и это работает просто отлично. Оформить пример здесь

Другие вопросы по тегам