猿问

Go中扩展类型的访问方法

以下代码生成“prog.go:17: c.Test undefined(Child 类型没有字段或方法 Test)”。( 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())

}

我意识到Test是在技术上定义的Base,但是应该Child继承那个方法吗?


摇曳的蔷薇
浏览 189回答 1
1回答

翻翻过去那场雪

在 go 中继承的方法是使用struct embeddingwith anonymous struct members。 这是对您的示例的改编。在此处阅读结构嵌入和 go 的继承方法等您遇到的行为是预期的,并且与golang 规范同步,该规范明确指出:任意类型T的方法集由接收者类型为T的所有方法组成。对应指针类型*T的方法集是所有接收者为*T或T的方法的集合(即还包含T的方法集)。更多规则适用于包含匿名字段的结构,如结构类型部分所述。任何其他类型都有一个空的方法集。
随时随地看视频慕课网APP

相关分类

Go
我要回答