
go方法与接收者中的继承问题
当使用结构体嵌入模拟继承时,接收者方法中无法获取派生结构体对象的属性。
考虑以下代码:
type person struct {
name string
}
type student struct {
person
name string
}
func (p person) name() {
fmt.println(p.name)
}
func main() {
student := student{person{"human"}, "aaron"}
student.name()
}输出 "human",而不是 "aaron"。原因在于接收者 person 传递给 name() 方法,因此 name() 方法只能访问 person 的属性。
解决方法是重写 name() 方法:
func (s Student) Name() {
fmt.Println(s.name)
}这将使用 student 接收者调用 name() 方法,允许访问 student 的属性。
需要注意的是,go 并未采用传统的继承概念,而是通过组合来模拟继承。因此,go 中没有构造函数或继承关键字,而是使用了嵌入和方法重写。









