在golang中使用继承方法访问对象

时间:2016-05-13 05:45:30

标签: go revel object-composition

我正在尝试在golang中实现继承。 以下是示例:

type A struct {
  Number int
}

type B struct{
  A
  name String
}

func (a A) GetNumber() {
    // Here I want to use instance of B
    fmt.Println(a) // but this is giving me instance of A
}

如果A被B继承,是否有可能在A的函数中得到B的实例?

1 个答案:

答案 0 :(得分:2)

首先,代码中存在错误。在您尚未创建定义为String的其他类型之前,您必须将其更正为string

然后在Go中你可以使用复合结构,这意味着你可以直接访问另一个结构中包含的结构字段,就像你已经做的那样。

这意味着您可以在方法接收器上调用方法,该方法接收器确实声明了struct字段。要更正您的示例,如果我能正确理解您的问题:

package main

import (
    "fmt"
)

type A struct {
    Number int
}

type B struct{
    A
    name string
}

func main() {
    b := &B{A{1}, "George"}
    b.GetValues()
}

func (b B) GetValues() {    
    fmt.Println(b.Number)
    fmt.Println(b.name)
}

在下面的示例中,因为struct A中包含struct B,这意味着您可以在GetValues方法中调用struct A中声明的结构字段。这是因为struct B继承了struct A字段。

https://play.golang.org/p/B-XJc6jddE