Как инициализировать переменную для структуры вложенного массива в Golang? - PullRequest
0 голосов
/ 15 января 2019

Я анализирую JSON-файл в Golang, создавая вложенную структуру, и могу сделать это успешно. Однако теперь я хочу создать переменную той же структуры, но я получаю следующую ошибку cannot use []Specs literal (type []Specs) as type []Specs in field value. Может ли кто-нибудь указать на мою ошибку здесь? Что я делаю не так?

Это вложенная структура:

type Config struct {
OrdererOrgs []OrdererOrgs `json:"OrdererOrgs"`
PeerOrgs []PeerOrgs `json:"PeerOrgs"`
}

type OrdererOrgs struct {
Name string `json:"name"`
Domain string `json:"Domain"`
Specs []Specs `json:"Specs"`
}

type Specs struct {
Hostname string `json:"Hostname"`
Commonname string `json:"Commonname"`
}

type PeerOrgs struct {
Name   string `json:"name"`
Domain   string `json:"Domain"`
Template Template `json:"Template"`
Users Users `json:"Users"`
}

type Template struct {
Count int `json:"Count"`
Start int `json:"Start"`
}

type Users struct {
Count int `json:"Count"`
}

А это моя переменная:

newconfig:= Config{
    OrdererOrgs: []OrdererOrgs{
        OrdererOrgs{
            Name: "Orderer1",
            Domain : "Domain",
            Specs: []Specs{
                Specs{
                Hostname: "H",
                Commonname: "C",
                },
                Specs{
                    Hostname: "H",
                    Commonname: "C",
                    },
            },
        },
        OrdererOrgs{
            Name: "Orderer2",
            Domain : "Domain2",
            Specs: []Specs{
                Specs{
                Hostname: "H",
                Commonname: "C",
                },
            },
        },
    },
    PeerOrgs: []PeerOrgs{
        PeerOrgs{
            Name: "Org1",
            Domain: "D",
            Template: Template{
                Count: 1,
                Start: 0,
            },
            Users: Users{
                Count: 1,
            },
        },
        PeerOrgs{
            Name: "Org2",
            Domain: "D2",
            Template: Template{
                Count: 1,
                Start: 0,
            },
            Users: Users{
                Count: 1,
            },
        },
    },
}

1 Ответ

0 голосов
/ 15 января 2019

Добро пожаловать в StackOverflow! Как сказал Фолькер в комментарии, ваш код, кажется, работает. Вы уверены, что видите проблему сейчас? Можете ли вы запустить ссылку на игровую площадку, предоставленную Volker?

В общем, это возможно в Go с помощью функции составных литералов ; Эта ссылка содержит несколько полезных примеров, а также обсуждение семантики, которая может показаться вам интересной. Если что-то перестает работать, я бы рекомендовал создавать все более сложные структуры, пока вы не увидите, в чем проблема, пока не достигнете уровня вложенности, необходимого для вашего приложения.

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