Go——如何处理结构类型之间的公共字段
Posted
技术标签:
【中文标题】Go——如何处理结构类型之间的公共字段【英文标题】:Go — how to handle common fields between struct types 【发布时间】:2013-02-18 00:54:21 【问题描述】:如果我有两种类型:
type A struct
X int
Y int
type B struct
X int
Y int
Z int
考虑到两个方法都访问同名字段并返回它们的总和,有没有什么方法可以在不需要两种方法的情况下实现以下目标?
func (a *A) Sum() int
return a.X + a.Y
func (b *B) Sum() int
return b.X + b.Y
当然,如果是 X 和 Y 方法,我可以定义一个包含这两种方法的接口。有没有字段的类比?
【问题讨论】:
【参考方案1】:在B
中嵌入A
。
type A struct
X int
Y int
func (a *A) Sum() int
return a.X + a.Y
type B struct
*A
Z int
a := &A1,2
b := &B&A3,4,5
fmt.Println(a.Sum(), b.Sum()) // 3 7
http://play.golang.org/p/fjT9c-m_Lj
但是不,没有字段接口。只有方法。
【讨论】:
我很想知道您为什么选择在 B 中嵌入指向 A 的指针,而不是直接在 B 中嵌入 A。愿意分享吗? @jpp:正因为OP在指针接收器上有方法,所以我认为它会更清楚。同样在某些情况下,它会有所不同,例如B
也是一个值而不是指针,并试图作为接口传递,如下所示:play.golang.org/p/k2e5saB7OI 但在这个例子中似乎不太可能。 以上是关于Go——如何处理结构类型之间的公共字段的主要内容,如果未能解决你的问题,请参考以下文章