7

2つのタイプがある場合:

type A struct {
      X int
      Y int
}

type B struct {
      X int
      Y int
      Z int 
}

両方が同じ名前のフィールドにアクセスし、それらの合計を返すことを考えると、2 つのメソッドを必要とせずに以下を達成する方法はありますか?

func (a *A) Sum() int {
     return a.X + a.Y
}

func (b *B) Sum() int {
     return b.X + b.Y
}

もちろん、X メソッドと Y メソッドの場合、これら 2 つのメソッドを含むインターフェイスを定義できます。フィールドの類似物はありますか?

4

1 に答える 1

12

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

しかし、いいえ、フィールド用のインターフェースはありません。メソッドのみ。

于 2013-03-04T01:18:49.240 に答える