You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何定义一次结构体后复用字段减少其他结构体的冗余

Go 重复结构体字段优化方案

Go 语言原生支持结构体匿名嵌入特性,可以完美解决这类公共字段复用需求,只需将重复字段抽取为独立的公共基础结构体,其他业务结构体直接嵌入该基础结构体即可,原有字段的序列化标签也会完全正常生效。

实现代码

方案1:支持后续单独扩展字段(推荐)

如果后续不同结构体需要新增各自独有的字段,优先用嵌入方式,和原有使用逻辑完全兼容:

// 抽取所有公共字段作为基础结构体
type CommonResourceFlag 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 {
    CommonResourceFlag
    // 后续可在此处单独追加 FormAction 独有的字段,不影响其他结构体
}

type ManifestSrc struct {
    CommonResourceFlag
    // 后续可在此处单独追加 ManifestSrc 独有的字段
}

type PrefetchSrc struct {
    CommonResourceFlag
    // 后续可在此处单独追加 PrefetchSrc 独有的字段
}

使用方式和原有代码完全一致,可直接访问嵌入的字段:var form FormAction; form.Data = true,YAML、JSON 序列化/反序列化效果和原有代码无任何差异。


方案2:无需扩展字段的精简写法

如果三个结构体后续完全不需要新增自定义字段,也可以直接用类型定义简化:

type CommonResourceFlag 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 CommonResourceFlag
type ManifestSrc CommonResourceFlag
type PrefetchSrc CommonResourceFlag

该方案下三个类型属于独立的自定义类型,不可直接互相赋值,适合完全不需要定制的场景。

内容的提问来源于stack exchange,提问作者Yash Katta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:15:03