Go 结构体嵌入模拟继承时,接收者方法如何访问派生结构体属性?
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 中没有构造函数或继承关键字,而是使用了嵌入和方法重写。
以上就是Go 结构体嵌入模拟继承时,接收者方法如何访问派生结构体属性?的详细内容,更多请关注其它相关文章!