Обратитесь к внутренней структуре - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь создать некоторые API документы программно, у меня есть это:

type APIDoc struct {
    Route           string
    ResolutionValue struct {
       v           string
    }
}

и затем я попытался сделать это:

    json.NewEncoder(w).Encode(APIDoc.ResolutionValue{"foo"})

но там написано, что

APIDoc.ResolutionValue не определено (тип APIDoc не имеет метода ResolutionValue)

поэтому я прибегнул к этому:

type ResolutionValue struct {
    v string
}

type APIDoc struct {
    Route           string
    ResolutionValue ResolutionValue
}

и затем делает:

    json.NewEncoder(w).Encode(ResolutionValue{"foo"})

вроде хромает, есть ли способ как-то обеспечить целостность?

1 Ответ

0 голосов
/ 29 октября 2018

Начиная с Go 1.11, вложенные типы не поддерживаются.

Обсуждение предложения

Ваша ревизия выглядит намного лучше IMO.

Редактировать: Возможно, это не связано с вопросом, но вы можете использовать внедрение типов, чтобы упростить ваши типы. Однако обратите внимание, что представление отличается:

type Inner struct {
    Whatever int
}

type ResolutionValue struct {
    Val string
    Inner
}

type ResolutionValue2 struct {
    Val    string
    Inner Inner
}

func main() {

    a, _ := json.Marshal(ResolutionValue{})
    b, _ := json.Marshal(ResolutionValue2{})
    fmt.Printf("%s\n%s", a, b)

}

Какие отпечатки:

{"Val":"","Whatever":0}
{"Val":"","Inner":{"Whatever":0}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...