小编典典

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

go

对此有些困惑。请看游乐场

我希望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”来调用它,那么它可以工作,但是在那种情况下,我不能在函数中使用任何将值用作空接口的代码。对此进行了Google搜索,发现了一个非常有趣且有用的页面。
从OOP的角度看Golang的概念。欢迎就我在这里缺少的内容提供任何指导。也许这只是我在这里没有完全“了解” Golang。


阅读 270

收藏
2020-07-02

共1个答案

小编典典

Go不支持继承,因此不存在父母和子女的概念。这使名称在以下文本中令人困惑。它还表明您需要在重新实现继承与以类似方式设计数据结构之间进行思维上的飞跃。这个问题花了我一些时间来解决这个问题,答案是
“不要从继承层次结构开始,不知道如何在继承中进行,从go开始并设计要使用可用工具进行的工作”

SomeFunction定义为将a
Parent作为参数,因此必须将其作为父级传递。如果您想让孩子通过,请执行以下操作,即使用:

SomeFunction(child.Parent)

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

但是,我怀疑您真正想做的是声明一个名为的接口ParentChild实现它,并SomeFunction采用一个Parent接口。您的困惑将是当前Parent拥有一个数据成员,而接口仅具有功能。最简单的修复方法取决于您要执行的操作,但是一种途径是提供另一种函数来返回数据成员。然后,所有“子”类都可以嵌入此数据成员,而函数可以返回它(或指向它的指针)。但是,如果您对要尝试做的事情没有一个更清晰的了解,那只是猜测。

2020-07-02