内部具有不同结构的类型结构切片

时间:2019-02-20 21:10:10

标签: go

我正在尝试在下面创建以下json,但我没有得到它:

json

{
  "richResponse": {
    "items": [
      {
        "simpleResponse": {
          "textToSpeech": "foo1",
          "displayText": "foo2"
        }
      },
      {
        "basicCard": {
          "formattedText": "foo3",
          "imageDisplayOptions": "CROPPED"
        }
      }
    ]
  }
}

问题是我有一个名为[]struct的{​​{1}}(结构片),它有2个不同的结构ItemsSimpleResponse,但是我无法挂载这个json。

出现错误:

  

不能使用原义的SimpleResponse

     

不能使用BasicCard文字

main.go

https://play.golang.org/p/Gbl0UNWhqko

BasicCard

您能帮我挂载这个json吗?

1 个答案:

答案 0 :(得分:2)

Items是一片结构,但您正在使用它,就好像它是单个Item结构一样。如果切片的元素类型为Item,则正确的语法应为:

group := RichResponse{  
    Items: Items{ // This is a slice
        Item{ // This is an element in the slice
            SimpleResponse{"foo1", "foo2"},
            BasicCard{
                FormattedText: "foo3",
                ImageDisplayOptions: "CROPPED",
            },
        },
    },
}

请注意,如果您不想要一些真正混乱的结构文字,则需要将Item定义为命名类型。这是Playground上的一个有效示例:https://play.golang.org/p/pzO_w2cIeOJ