【问题标题】:Golang nested struct slice - Error index out of rangeGolang嵌套结构切片 - 错误索引超出范围
【发布时间】:2018-08-31 15:37:17
【问题描述】:

Playground

我正在尝试将字符串存储到结构内的切片字段中。这是为了收集数据并创建一个 Json 以通过 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))
}

错误

我得到的错误:

panic: runtime error: index out of range

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

【问题讨论】:

  • 您必须make 具有适当大小的切片才能分配给它的元素。参加围棋之旅。
  • 您不必事先制作合适大小的切片。详情看我的回答。
  • go lang is a static type language 如果您使用的是数组,则意味着您需要使用 make 来修复 array 的大小

标签: arrays go struct slice


【解决方案1】:

您不必事先make 具有适当大小的切片。您可以使用附加。您在示例中尝试做的是分配一个尚未创建的切片“[0]”,这就是您收到错误的原因。使用附加并更改您的行

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

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

这会将文字结构附加到您的数组中。现在通过查看您的代码,我假设您这样做是为了探索语言,所以我不会详细介绍如何在不知道您实际使用它的情况下如何更好地编写它。

【讨论】:

  • 谢谢丹!你是绝对正确的。信息量少!我添加了更多信息。您的解决方案适用于但不适用于 Slice 有多个孩子的情况。然后又失败了。下次我会直接添加更多信息:-)
  • 不,为什么,Dan 的代码填充没问题。它只会将您的子结构附加到切片。
猜你喜欢
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2017-05-12
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多