1

匿名メソッドの埋め込みを使用するときに、「親」構造体のメソッドから「子」構造体の名前にアクセスする方法はありますか。

例えば:

type Animal struct{}

func (a Animal) SayName() string {
    v := reflect.TypeOf(a)
    return v.Name()
}

type Zebra struct {
    Animal
}

var zebra Zebra
zebraName := zebra.SayName() // "Animal" want "Zebra"

SayName()メソッドはtype.Name()、「親」のを返します。

私はこのようなことができると思いますが、これはAPI用であり、頻繁に再利用されるためです。繰り返しの少ないソリューションが欲しいです。

type Animal struct{
  Name string
}

func (a Animal) SayName() string {
    return a.Name
}

type Zebra struct {
    Animal
}

zebra := &Zebra{Name:"Zebra"}
zebraName := zebra.SayName() // "Zebra"

これをどのように達成できるかについてのアイデアはありますか?これはGoで可能ですか?

ありがとうございました。

4

2 に答える 2

2

動物のタイプは、それらをメンバーとして含む可能性のあるタイプについては何も知らないため、動物のメソッドでは、受信者だけに基づいてこの答えを出すことはできません。しかし、この情報はZebraメソッドから取得する必要がありますか?

func SayName(a interface{}) string {
    return reflect.TypeOf(a).Name()
}

Zebrasを含め、あらゆるタイプで機能します。

于 2012-04-21T17:30:41.590 に答える
1

私はこの方法を使用して遅延バインディングを実現します。

http://play.golang.org/p/03-rs4bLaV

これはそれほど完璧ではありませんが、これを達成する方法です。

于 2013-04-11T14:09:58.760 に答える