4

次のインターフェースと構造体がある場合:

package shape

type Shape interface {
    Area()
}

type Rectangle struct {
}

func (this *Rectangle) Area() {}

func New() Shape {
    return &Rectangle{}
}

New()次に、メソッドを (コンストラクターとして) インターフェイスに追加するにはどうすればよいShapeですか?

ユースケースは、別の構造体がある場合ですSquare

type Square struct {
    Rectangle
}

次に、SquareメソッドがありArea()ます。しかし、それはありませんNew()。私の目的は、継承する構造体に自動的にメソッドをShape持たせることです。New()どうやってやるの?

4

2 に答える 2

6

Go では、インターフェイスでメソッドを作成することはできません。

インターフェイスのメソッドを作成する代わりに、慣用的な方法は、インターフェイスを引数として取る関数を作成することです。あなたのケースでは、reflect パッケージを使用して、同じ型の New インスタンスを返す Shape を取ります。

func New(s Shape) Shape { ... }

もう 1 つの可能性は、インターフェイスを構造体型に埋め込み、代わりに構造体型で New メソッドを作成することです。

遊び場の例: http://play.golang.org/p/NMlftCJ6oK

于 2013-10-27T11:18:23.827 に答える