对此有点困惑。请看操场。我希望 go 允许您调用一个方法,该方法需要一个父级和一个嵌入该父级的子级。 package mainimport ( "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”调用它,它可以工作,但在这种情况下,我不能在函数中使用任何将值用作空接口的代码。谷歌搜索了一下,发现了一个非常有趣和有用的页面。 从 OOP 的角度来看 Golang 概念。欢迎任何关于我在这里缺少的指导。也许这只是我在这里没有完全“获得” Golang。
1 回答
holdtom
TA贡献1805条经验 获得超10个赞
Go 不支持继承,所以不存在父母和孩子的概念。这使得下面的文本中的名称令人困惑。它还表明您需要在重新实现继承和以类似 go 的方式设计数据结构之间进行思维飞跃。这个问题花了我一些时间来解决问题,答案是“不要从继承层次结构开始,想知道如何在 go 中执行它,从 go 开始并使用可用工具设计你想要做的事情” .
SomeFunction
被定义为将 aParent
作为参数,因此您必须将其传递给父级。如果你想通过这一个孩子,你需要做这个,即使用:
SomeFunction(child.Parent)
这就是传递嵌入式结构的方法。
但是,我怀疑您真正想要做的是声明一个名为 的接口Parent
,Child
实现它并SomeFunction
获取一个Parent
接口。您的困惑将是当前Parent
有一个数据成员,而接口只有功能。解决此问题的最巧妙方法取决于您要执行的操作,但一种方法是提供另一个函数来返回数据成员。然后所有的“子”类都可以嵌入这个数据成员,并且函数可以返回它(或指向它的指针)。但是,如果没有更清楚地了解您要做什么,这只是猜测。
- 1 回答
- 0 关注
- 142 浏览
添加回答
举报
0/150
提交
取消