2013-03-04 65 views
6

之間的公共領域如果我有兩種類型:圍棋 - 如何處理結構類型

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方法,我可以定義一個包含這兩個方法的接口。有沒有類似的領域?

回答

11

Embed A in 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

但是,沒有,有一個爲領域沒有任何接口。只有方法。

+0

我很想知道爲什麼你選擇在B中嵌入指向A的指針,而不是直接在B中嵌入A.謹慎分享? – carbocation 2013-03-04 02:09:53

+1

@jpp:只是因爲OP在指針接收器上有方法,所以我認爲它會更清晰。在某些情況下,它也有所不同,例如'B'也是一個值而不是指針,並試圖作爲接口傳遞,如下所示:http://play.golang.org/p/k2e5saB7OI但是這似乎不可能給出這個例子。 – 2013-03-04 02:23:46