一尘不染

Go lang中的多态性

go

我正在学习go lang,我想知道是否可以做这样的事情:

type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

func getFoo() Foo {
   return Bar{...}
}

在面向对象的语言中,这样的代码应该可以正常工作,但是在执行过程中会抛出一个错误,说getFoo()必须返回Foo类的实例。

有没有一种方法可以类似于我在Go中描述的多态性?


阅读 235

收藏
2020-07-02

共1个答案

一尘不染

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

2020-07-02