这是我想要的简单示例:我有 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)
}
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消