以下代码生成“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())
}
我意识到Test
在Base
上是技术定义的,但Child
是否应该继承该方法?
答案 0 :(得分:5)
go中继承的方法是使用struct embedding
和anonymous struct members
。
Here is an adaption of your example
了解struct embedding和go的继承方法等here
您遇到的行为是预期的,并与golang specification同步,后者明确指出:
任何类型T的方法集由接收器类型为T的所有方法组成。相应指针类型* T的方法集是所有带接收器* T或T的方法的集合(也就是说,它还包含方法一套T)。进一步的规则适用于包含匿名字段的结构,如结构类型一节中所述。 任何其他类型都设置了空方法。