type Being interface {
somemethod()
}
type Foo struct {}
type Bar struct {
Foo
}
type Baz struct {
Foo
}
// `Bar` and `Baz` implement `Being`
func (b *Bar) somemethod() {}
func (b *Baz) somemethod() {}
func getAnyFoo(b *Being) Foo {
return b.Foo
}
因此,任何东西都实现空接口。
type Foo struct {}
type Bar struct {
Foo
}
// Get anything and extract its `Foo` if anything is a Bar
func getAnyFoo(i interface{}) Foo {
// Normally this would need a type switch to check the type
mybar := i.(Bar)
return mybar.Foo
}
4条答案
按热度按时间7uhlpewt1#
Go语言不是典型的面向对象语言,每种语言都有自己的做事方式,你可以通过界面和组合来实现你想要的,如下图所示:
http://play.golang.org/p/iR8QkD3DnP
wnvonmuf2#
在Go语言中,多态性是通过实现接口来实现的。
因此,任何东西都实现空接口。
e5nqia273#
如果你知道要使用的类型,你可以把它们放到一个数组列表中,以实现一种变形示例化:
mec1mxoz4#
你可以用下面的方法来使用它。如果你给予print函数一个person或secret Agent,它会理解它直接来自于人机界面,并在里面运行函数。
Package 主体