2012-04-21 56 views
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有可能嗎?

謝謝。

回答

2

動物類型不知道任何可能包括它們作爲成員的類型,所以Animal方法不能僅基於接收者給出這個答案。但是,這些信息必須來自Zebra方法嗎?

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

適用於任何類型,包括斑馬。

+0

謝謝,這可能是我最終採取的路徑。實際的用例涉及多種方法,一些在「實例」上執行,一些在「類」上執行。爲了一致性,我希望能夠使用點符號來調用這些方法。問題是每個這些方法都需要知道結構的名稱。 – 2012-04-21 17:44:43

1

我用這種方式來實現綁定晚:

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

這是不是那麼完美,但是一種方法來實現這一目標。

+0

感謝您的示例代碼。 – 2013-04-11 15:15:58