我正在学习go lang,我想知道是否可以做这样的事情:
type Foo struct { ... } type Bar struct { Foo ... } func getFoo() Foo { return Bar{...} }
在面向对象的语言中,这样的代码应该可以正常工作,但是在执行过程中会抛出一个错误,说getFoo()必须返回Foo类的实例。
getFoo()
有没有一种方法可以类似于我在Go中描述的多态性?
Go不是典型的OO语言。同样,每种语言都有自己的处理方式。您可以使用界面和组成来实现所需的目标,如下所示:
package main import "fmt" type Foo interface { printFoo() } type FooImpl struct { } type Bar struct { FooImpl } type Bar2 struct { FooImpl } func (f FooImpl)printFoo(){ fmt.Println("Print Foo Impl") } func getFoo() Foo { return Bar{} } func main() { fmt.Println("Hello, playground") b := getFoo() b.printFoo() }
http://play.golang.org/p/iR8QkD3DnP