这就是我想要的简单例子:
我有B的对象并使用struct A的函数step1(常用功能)。我需要重新定义在A中运行的B的函数step2。
package main
import "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);
}
答案 0 :(得分:6)
Go不做多态。你必须重新制作你想要做的接口,以及采用这些接口的函数(而不是方法)。
因此,请考虑每个对象需要满足哪个接口,然后在该接口上使用哪些函数。 go标准库中有很多很好的例子,例如io.Reader
,io.Writer
以及适用于这些例子的函数,例如io.Copy
。
Here is my attempt将您的示例改写为该样式。它没有多大意义,但希望它会给你一些工作。
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)
}