为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 中的多态性

Golang 中的多态性

Go
浮云间 2021-12-07 14:51:41
这是我想要的简单示例:我有 B 的对象并使用结构 A 中的函数 step1(通用功能)。我需要为在 A 内部运行的 B 重新定义函数 step2。package mainimport "fmt"type A struct {}func (a *A) step1() {    a.step2();}func (a *A) step2 () {   fmt.Println("get A");}type B struct {   A}func (b *B) step2 () {   fmt.Println("get B");}func main() {    obj := B{}    obj.step1() }我该怎么做?// maybe func step1(a *A) {   self.step2(a);}
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

Go 不做多态性。您必须根据接口和采用这些接口的函数(而不是方法)重新定义您想要做的事情。


所以想想每个对象需要满足什么接口,然后你需要在那个接口上工作什么功能。go 标准库中有很多很棒的例子,例如io.Reader,io.Writer以及对这些起作用的函数,例如io.Copy。


这是我尝试将您的示例改写为这种风格的尝试。它没有多大意义,但希望它会给你一些工作。


package main


import "fmt"


type A struct {

}


type steps interface {

    step1()

    step2()

}


func (a *A) step1() {

    fmt.Println("step1 A")

}


func (a *A) step2() {

    fmt.Println("get A")

}


type B struct {

    A

}


func (b *B) step2() {

    fmt.Println("get B")

}


func step1(f steps) {

    f.step1()

    f.step2()

}


func main() {

    obj := B{}

    step1(&obj)

}


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信