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

对此有点困惑。请看操场。


我希望 go 允许您调用一个方法,该方法需要一个父级和一个嵌入该父级的子级。


 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”调用它,它可以工作,但在这种情况下,我不能在函数中使用任何将值用作空接口的代码。谷歌搜索了一下,发现了一个非常有趣和有用的页面。 从 OOP 的角度来看 Golang 概念。欢迎任何关于我在这里缺少的指导。也许这只是我在这里没有完全“获得” Golang。


慕运维8079593
浏览 143回答 1
1回答

holdtom

Go 不支持继承,所以不存在父母和孩子的概念。这使得下面的文本中的名称令人困惑。它还表明您需要在重新实现继承和以类似 go 的方式设计数据结构之间进行思维飞跃。这个问题花了我一些时间来解决问题,答案是“不要从继承层次结构开始,想知道如何在 go 中执行它,从 go 开始并使用可用工具设计你想要做的事情” .SomeFunction被定义为将 aParent作为参数,因此您必须将其传递给父级。如果你想通过这一个孩子,你需要做这个,即使用:SomeFunction(child.Parent)这就是传递嵌入式结构的方法。但是,我怀疑您真正想要做的是声明一个名为 的接口Parent,Child实现它并SomeFunction获取一个Parent接口。您的困惑将是当前Parent有一个数据成员,而接口只有功能。解决此问题的最巧妙方法取决于您要执行的操作,但一种方法是提供另一个函数来返回数据成员。然后所有的“子”类都可以嵌入这个数据成员,并且函数可以返回它(或指向它的指针)。但是,如果没有更清楚地了解您要做什么,这只是猜测。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go