golang 定义结构一次,在另一个结构定义中使用

Posted

技术标签:

【中文标题】golang 定义结构一次,在另一个结构定义中使用【英文标题】:golang Define struct once and use it in another struct definition 【发布时间】: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 中没有要映射的东西......” -- 这不是问题的一部分,甚至来自评论我不清楚建议的解决方案的确切问题是什么。请通过解释为什么建议的解决方案还不够来更新您的问题,并提供您尝试使用所述建议的代码。并包含有关您遇到的错误的任何信息。 【参考方案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

【讨论】:

以上是关于golang 定义结构一次,在另一个结构定义中使用的主要内容,如果未能解决你的问题,请参考以下文章

Golang 在另一个结构的方法中更改结构的值

Golang基础之结构体

golang中级进阶(二):结构体

Butterknife @BindView 中的 AnnotationTypeMismatchException,布局在另一个文件夹结构中定义

golang 匿名结构体怎么append?

c语言中如何引用另一个源文件中定义的结构数组