如果我有两种类型:
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方法,我可以定义一个包含这两种方法的接口。字段是否有模拟?
答案 0 :(得分:11)
在A
中嵌入B
。
type A struct {
X int
Y int
}
func (a *A) Sum() int {
return a.X + a.Y
}
type B struct {
*A
Z int
}
a := &A{1,2}
b := &B{&A{3,4},5}
fmt.Println(a.Sum(), b.Sum()) // 3 7
http://play.golang.org/p/fjT9c-m_Lj
但不,没有字段的界面。只有方法。