immrsteel
immrsteel

Reputation: 1495

How to initialize nested struct in golang?

type important struct {
client     string                 `json:"client"`
Response   Summary        `json:"response"`

}

type Summary struct {
Name     string           `json:"name"`
Metadata Clientdata      `json:"metadata"`
}

type Clientdata struct {
Income string           `json:"income"` 
}


v := &important{ client: "xyz", Response:  Summary[{
            Name: "test",
            Metadata: Clientdata { "404040"},
        }
    }]

//Error: Cannot use Summary{ Name: "test", Metadata: Clientdata { "404040"}, } (type Summary) as type []Summary more...

What I am doing wrong here?

Upvotes: 0

Views: 2731

Answers (2)

Alexei Danchenkov
Alexei Danchenkov

Reputation: 2082

It wasn't clear how you wanted to approach it, as your Response struct implies []VmSummary info, but you are feeding it []Summary.

Also, check https://blog.golang.org/go-slices-usage-and-internals on initialization of arrays.

Something like that?

type important struct {
    client   string    `json:"client"`
    Response []Summary `json:"response"`
}

type Summary struct {
    Name     string     `json:"name"`
    Metadata Clientdata `json:"metadata"`
}

type Clientdata struct {
    Income string `json:"income"`
}

func main() {
    v := &important{
        client: "xyz",
        Response: []Summary{
            {
                Name:     "test",
                Metadata: Clientdata{"404040"},
            },
        },
    }
}

Upvotes: 1

Milo Christiansen
Milo Christiansen

Reputation: 3294

To put it simply, you goofed the syntax of a slice literal slightly. Your mistake is fairly logical, but sadly it doesn't work.

The following is a fixed version:

v := &important{ client: "xyz", Response: []Summary{
        {
            Name: "test",
            Metadata: Clientdata { "404040"},
        },
    },
}

A slice literal is defined like so:

[]type{ items... }

Upvotes: 2

Related Questions