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

调用带有结构嵌入父级的父级的函数不起作用

调用带有结构嵌入父级的父级的函数不起作用

Go
慕运维8079593 2022-01-10 15:01:17
对此有点困惑。请看操场。我希望 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)

这就是传递嵌入式结构的方法。

但是,我怀疑您真正想要做的是声明一个名为 的接口ParentChild实现它并SomeFunction获取一个Parent接口。您的困惑将是当前Parent有一个数据成员,而接口只有功能。解决此问题的最巧妙方法取决于您要执行的操作,但一种方法是提供另一个函数来返回数据成员。然后所有的“子”类都可以嵌入这个数据成员,并且函数可以返回它(或指向它的指针)。但是,如果没有更清楚地了解您要做什么,这只是猜测。


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

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