【问题标题】:How to append a "sub"struct to a list in go如何将“子”结构附加到go中的列表
【发布时间】:2018-03-19 00:41:01
【问题描述】:
type A struct {
  B []struct {
    C string
    D []struct {
      E string
      F []struct {
        G string
      }
    }
  }
}

假设我有一个结构 A 的实例,我想 将结构 D 附加到其中。我会尝试做类似的事情

var a A;
...
a.B.D = append(a.B.D, ???)

??? = A.B.D

-->类型A没有方法B

??? = D

--> 未定义:D

--- 编辑更完整的例子---

type A struct {
  B []struct {
    C string
    D hugeNestedElement
  }
}

var a A
// Goal is to create many B's
a = append(a, what_goes_here)
// or ...
a = append(a.B, what_goes_here)

【问题讨论】:

  • 你能举一个更完整的例子吗?这是所有的代码吗?
  • 将 D 附加到 A 是不正确的说法。您实际上是在选择一个 B 来附加一个 D 。因为 A.B 是一个结构体切片,所以可能有很多 Bs

标签: go data-structures struct


【解决方案1】:

由于B 是一个结构切片,它直接没有D 属性。 B 的数量可能不定:

type A struct {
  B []struct {
    C string
    D []struct {
      E string
      F []struct {
        G string
      }
    }
  }
}

由于B 是一个切片,下面的条目假定您想将新的D 附加到第一个B

A.B[0].D = append(A.B[0].D, anotherD)

【讨论】:

  • 如果你有E stringG string,你将如何创建anotherD
  • @CharlieGetzen 您必须在 append() 中创建新的匿名结构定义,例如a.B = append(a.B, struct{ C string }{"value"})。在这种情况下避免使用匿名结构很麻烦,也是一个很好的理由,尤其是当它比一两个简单字段更复杂时。
  • 谢谢!正是我想要的。我假设建议拆分该结构并按名称引用它而不是嵌套?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2014-04-06
  • 2017-03-28
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多