Go中扩展类型的访问方法

时间:2014-03-16 19:07:43

标签: oop inheritance go

以下代码生成“prog.go:17:c.Test undefined(类型Child没有字段或方法测试)”。 (http://play.golang.org/p/g3InujEX9W

package main

import "fmt"

type Base struct {
    X int
}

func (b Base) Test() int {
    return b.X
}

type Child Base

func main() {
    c := Child{4}
    fmt.Println(c.Test())
}

我意识到TestBase上是技术定义的,但Child是否应该继承该方法?

1 个答案:

答案 0 :(得分:5)

go中继承的方法是使用struct embeddinganonymous struct membersHere is an adaption of your example

了解struct embedding和go的继承方法等here

您遇到的行为是预期的,并与golang specification同步,后者明确指出:

  

任何类型T的方法集由接收器类型为T的所有方法组成。相应指针类型* T的方法集是所有带接收器* T或T的方法的集合(也就是说,它还包含方法一套T)。进一步的规则适用于包含匿名字段的结构,如结构类型一节中所述。 任何其他类型都设置了空方法。