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

Animal 类型对可能将它们包含为成员的类型一无所知,因此 Animal 方法无法仅根据接收者为您提供此答案。但是这些信息必须来自 Zebra 方法吗?

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

适用于任何类型,包括斑马。

于 2012-04-21T17:30:41.590 回答
1

我用这种方式来实现后期绑定:

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

这不是那么完美,而是实现这一目标的一种方法。

于 2013-04-11T14:09:58.760 回答