对此有点困惑。请参阅playground。
我希望你允许你调用一个方法,该方法将父母带有嵌入父母的孩子。
package main
import (
"fmt"
)
type Parent struct {
A string
}
type Child struct {
Parent
}
func SomeFunction(parent Parent) {
fmt.Println("%v", parent.A)
}
func main() {
child := Child{Parent{A:"test"}}
SomeFunction(child) //prog.go:21: cannot use child (type Child) as type Parent in argument to SomeFunction
}
如果我用" child.Parent"它可以工作,但在这种情况下,我不能在函数中使用任何代码,将该值用作空接口。用谷歌搜索出来,发现了一个非常有趣且有用的页面。 Golang concepts from an OOP point of view。我欢迎任何关于我在这里失踪的指导。也许这只是我不完全"得到" Golang在这里。
答案 0 :(得分:4)
Golang不支持继承,因此父母和孩子的概念不存在。这使得名称在下面的文本中令人困惑。它还表明,您需要在重新实现继承和以类似方式设计数据结构之间实现精神上的飞跃。这个问题花了我一些时间来解决问题,答案是不要从继承层次结构开始,并想知道如何去做,开始去设计你的东西想要使用可用的工具' 。
SomeFunction
定义为将Parent
作为参数,因此您必须将其传递给父级。如果你想传递给孩子,你需要做this,即使用:
SomeFunction(child.Parent)
这是你传递嵌入式结构的方法。
但是,我怀疑你真正想做的是声明一个名为Parent
的接口,让Child
实现它,并让SomeFunction
接受Parent
接口。您的困惑是,当前Parent
有一个数据成员,接口只有函数。解决这个问题的最好方法取决于你要做的事情,但是一条路线就是提供另一个函数来返回数据成员。所有的孩子都是'然后,类可以嵌入此数据成员,函数可以返回它(或指向它的指针)。然而,如果没有更清楚地知道你想要做什么,这只是猜测。