Golang嵌套结构片-错误索引超出范围

Playground

I'm trying to store a string into a slice field inside a struct. This is for collecting data and create a Json to post via to an API.

package main

type response1 struct {
Identifier string `json:"identifier"`
Family     string `json:"family"`
Values     struct {
    Logo []struct {
        Data string `json:"data"`
        Scope string `json:"scope"`
    } `json:"logo"`
  }
}

func main() {

    res2D := &response1{
        Identifier: "1234567",
        Family:     "example",
    }

    res2D.Values.Logo[0].Data = "test"

    res2B, _ := json.Marshal(res2D)

    fmt.Println(string(res2B))
}

Error

And the error I got:

panic: runtime error: index out of range

goroutine 1 [running]:
main.main()
    /tmp/sandbox507443306/main.go:22 +0xe0

You do not have to make the slice with appropriate size before hand. You can use append. What you are trying to do in your example is assign a slice "[0]" that has not been created yet, which is why you are getting your error. Use append and change your line

res2D.Values.Logo[0].Data = "test"

to

res2D.Values.Logo = append(res2D.Values.Logo,struct {Data string "json:\"data\"" }{Data: "test"})

and that will append the literal struct into your array. Now by looking at your code I am assuming you doing this as a test to explore the language so I wont go into detail on how to better write this without knowing what you are actually using it for.