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

Go语言中如何避免为嵌套同结构体的多类型编写重复方法?

解决Go结构体嵌入后重复实现接口的方案

你可以直接给BaseModel实现Model接口的所有方法,借助Go的结构体方法提升特性,让ModelA和ModelB自动继承这些方法,无需重复编写代码。

具体实现代码

type BaseModel struct {
    Id     int
    Val    string
}

// 给BaseModel实现Model接口的所有方法
func (b *BaseModel) ID() int {
    return b.Id
}

func (b *BaseModel) SetId(id int) {
    b.Id = id
}

func (b *BaseModel) Val() string {
    return b.Val
}

func (b *BaseModel) SetVal(val string) {
    b.Val = val
}

type ModelA struct {
    BaseModel
    ValA   string
}

type ModelB struct {
    BaseModel
    ValB   string
    ValBB   string
}

type Model interface {
    ID() int
    SetId(int)
    Val() string
    SetVal(string)
}

方案原理

Go语言中,当结构体嵌入另一个类型时,被嵌入类型的所有方法会被提升为当前结构体的方法(只要当前结构体没有定义同名方法)。因此BaseModel实现Model接口后,ModelA和ModelB会自动拥有这些方法,自然满足Model接口的要求,可以直接作为Model类型传递给函数。

自定义扩展说明

如果后续ModelA或ModelB需要对某个方法做自定义逻辑,只需在对应结构体上重新实现该方法即可,此时会覆盖BaseModel的同名方法,不影响其他方法的继承逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:04:59