【问题标题】:Append struct to anonymous slice of structs in Go将结构附加到 Go 中的匿名结构切片
【发布时间】:2020-07-17 01:16:16
【问题描述】:

我正在使用一个已定义的结构,例如这个:

type MyList struct {
    Items  []struct {
        ResourceLocation string `json:"resourceLocation"`
        Resource         Tmp  `json:"resource"`
    } `json:"items"`
    ListOptions
}

我需要在 Items 切片中添加一个结构体。

我尝试了以下方法:

tmp2 := struct {
            ResourceLocation string
            Resource         Tmp
        }{
            Resource:   myTempStruct,
        }

        tmpList.Items = append(MyList.Items, tmp)

但我得到了一个:

不能使用 'tmp' (type struct {...}) 作为 type struct {...}

错误。

顺便说一下,我不能修改

type MyList struct {
    Items  []struct {
        ResourceLocation string `json:"resourceLocation"`
        Resource         Tmp  `json:"resource"`
    } `json:"items"`
    ListOptions
}

这就是为什么我不能为Items 分配名称并将其定义在单独的结构中的原因。 谢谢。

【问题讨论】:

  • 您还必须将相同的 json 标签添加到匿名结构中。

标签: go struct slice


【解决方案1】:

问题中的代码不起作用,因为字段标签是类型的一部分。

将字段标签添加到问题中的匿名类型:

item := struct {
    ResourceLocation string `json:"resourceLocation"`
    Resource         Tmp    `json:"resource"`
}{
    Resource: myTempStruct,
}

更好的是,声明一个与 MyList.Items 的元素具有相同基础类型的类型。

type Item struct {
    ResourceLocation string `json:"resourceLocation"`
    Resource         Tmp    `json:"resource"`
}

在构造元素时使用该类型:

item := Item{Resource: myTempStruct}
list.Items = append(list.Items, item)

【讨论】:

  • 这很有魅力。不知道字段标签与此有关,我认为它们只是装饰性的(仅供参考)。谢谢
猜你喜欢
  • 2018-12-05
  • 2013-08-05
  • 2019-07-14
  • 1970-01-01
  • 2019-04-12
  • 2016-12-24
  • 2017-07-27
  • 2016-12-08
  • 2016-07-22
相关资源
最近更新 更多