doudinghan8319 2016-01-31 15:11
浏览 38
已采纳

Go lang中的多态性

I am learning go lang and i was wondering if there is a way to do something like this:

type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

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

In an object oriented language, such code should work without problems, but in go it throws me an error, saying that getFoo() must return an instance of class Foo.

Is there a way to do polymorphism similar to what i've described in Go?

  • 写回答

2条回答 默认 最新

  • dskzap8756 2016-01-31 15:39
    关注

    Go is not a typical OO language. Also each language has it own way of doing things. You can use interface and composition to achieve what you desire to, as shown below:

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题