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
相关产品推荐
相关产品推荐

