【问题标题】:golang Define struct once and use it in another struct definitiongolang 定义结构一次,在另一个结构定义中使用
【发布时间】:2022-01-02 18:58:43
【问题描述】:

定义一次结构并在另一个结构定义中使用它

type FormAction struct {
    Data bool `yaml:"data,omitempty" json:"data,omitempty"`
    Self bool `yaml:"self,omitempty" json:"self,omitempty"`
    Blob bool `yaml:"blob,omitempty" json:"blob,omitempty"`
}
type ManifestSrc struct {
    Data bool `yaml:"data,omitempty" json:"data,omitempty"`
    Self bool `yaml:"self,omitempty" json:"self,omitempty"`
    Blob bool `yaml:"blob,omitempty" json:"blob,omitempty"`
}
type PrefetchSrc struct {
    Data bool `yaml:"data,omitempty" json:"data,omitempty"`
    Self bool `yaml:"self,omitempty" json:"self,omitempty"`
    Blob bool `yaml:"blob,omitempty" json:"blob,omitempty"`
}

我们如何减少相同成员的冗余?

【问题讨论】:

  • 你可以做type ManifestSrc FormAction。见:go.dev/ref/spec#Type_declarations
  • …或使用field embedding。我真的建议在开始非玩具任务之前至少获得该语言的基本知识。
  • @mkopriva @kostix 这不适用于解组的东西。由于我们在 YAML 和 json 中没有任何要映射的内容 ``` FormAction: Data: true ManifestSrc: Self: true ``
  • @YashKatta “因为我们在 YAML 和 json 中没有要映射的东西......” -- 这不是问题的一部分,甚至来自评论我不清楚建议的解决方案的确切问题是什么。请通过解释为什么建议的解决方案还不够来更新您的问题,并提供您尝试使用所述建议的代码。并包含有关您遇到的错误的任何信息。

标签: go struct coding-style


【解决方案1】:

在多个结构中定义相同字段而不重复自己的最惯用的方法可能是使用嵌入,因为它仍然允许您添加其他字段,例如:

type entity struct {
    Data bool `yaml:"data,omitempty" json:"data,omitempty"`
    Self bool `yaml:"self,omitempty" json:"self,omitempty"`
    Blob bool `yaml:"blob,omitempty" json:"blob,omitempty"`
}
type FormAction struct {
    entity
}
type ManifestSrc struct {
    entity
}
type PrefetchSrc struct {
    entity
    AnotherField string // For example
}

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2011-06-22
    相关资源
    最近更新 更多