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

Golang,调用父母的方法

Golang,调用父母的方法

Go
临摹微笑 2021-12-20 14:47:37
从下面的例子来看,Child 对象是否可以调用 Parent 的方法?例如,我想让孩子(男孩 1 和女孩 1)调用父母的“记住”方法;这样父母就可以记住孩子想让他们记住的东西。太感谢了package mainimport "fmt"type child struct {    Name string }func (p *child) Yell() {    fmt.Println("Child's yelling")}type parent struct {    Name string     Children []child    Memory []string}func (p *parent) Yell() {    fmt.Println("Parent's yelling")}func (p *parent) Remember(line string) {    p.Memory = append(p.Memory, line)}func main() {    p := parent{}    p.Name = "Jon"    boy1 := child{}    boy1.Name = "Jon's boy"    girl1 := child{}    girl1.Name = "Jon's girl"    p.Children = append(p.Children, boy1)    p.Children = append(p.Children, girl1)    fmt.Println(p)    p.Yell()    for i:=0;i<len(p.Children);i++ {        p.Children[i].Yell()    }}
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

这是解决方案。指针总是令人困惑。


包主


import "fmt"


type child struct {

    Name string

    prnt *parent

}


func (p *child) Yell() {

    fmt.Println("Child's yelling")

}


type parent struct {

    Name     string

    Children []child

    Memory   []string

}


func (p *parent) Yell() {

    fmt.Println("Parent's yelling")

}


func (p *parent) Remember(line string) {

    p.Memory = append(p.Memory, line)

}


func main() {

    p := parent{}

    p.Name = "Jon"

    boy1 := child{}

    boy1.Name = "Jon's boy"

    boy1.prnt = &p

    girl1 := child{}

    girl1.Name = "Jon's girl"

    girl1.prnt = &p


    p.Children = append(p.Children, boy1)

    p.Children = append(p.Children, girl1)

    fmt.Println(p)


    p.Yell()

    for i := 0; i < len(p.Children); i++ {

        p.Children[i].Yell()

        p.Children[i].prnt.Remember("test:" + p.Children[i].Name)

    }


    fmt.Println(p.Memory)

}


查看完整回答
反对 回复 2021-12-20
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您可以在子结构中添加指向父结构的指针


type child struct {

    Name string

    parent *parent

}


func (p *child) Yell() {

    fmt.Println("Child's yelling")

    p.parent.Remember(p.Name + " called")

    p.parent.Yell()

}


查看完整回答
反对 回复 2021-12-20
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我只是 Golang 的初学者。


似乎Golang约定是类名的CamelCase,并且在继承基类(“Parent”)时不应分配变量名。 p.Parent将自动工作,即如下:


type Child struct {

    *Parent   // put at top

    Name string

}


func (p *Child) Yell() {

    fmt.Println("Child's yelling")

    p.Parent.Remember(p.Name + " called")

    p.Parent.Yell()

}

参考:


http://arch-stable.blogspot.hk/2012/05/golang-call-inherited-constructor.html

https://medium.com/@simplyianm/why-gos-structs-are-superior-to-class-based-inheritance-b661ba897c67

其他一些示例使用非指针 Parent 继承,例如:


type Child struct {

    Parent   // put at top

    Name string

}

不确定哪一个更正式和方便


查看完整回答
反对 回复 2021-12-20
  • 3 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

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