本文主要是介绍Go组合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘要
golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合
组合使用注意项
使用匿名引入的方式来组合其他struct
默认优先调用外层方法
可以指定匿名struct以调用内层方法
代码
package mainimport ("fmt"
)type People struct{}type People2 struct{}func (p *People) ShowA() {fmt.Println("showA")p.ShowB()
}
func (p *People) ShowB() {fmt.Println("showB")
}func (p *People) ShowC() {fmt.Println("showC")
}func (p *People) ShowD() {fmt.Println("People:showD")
}func (p *People2) ShowD() {fmt.Println("People2:showD")
}type Teacher struct {People //组合PeoplePeople2 //组合People2
}func (t *Teacher) ShowB() {fmt.Println("teacher showB")
}
func (t *Teacher) ShowC(arg string) {fmt.Println(arg)
}func main() {t := Teacher{}//print showA//print showBt.ShowA()//print teacher showBt.ShowB()//print showBt.People.ShowB()//print testt.ShowC("test")//print showCt.People.ShowC()//因为组合方法中多次包含ShowD,所以调用时必须显示指定匿名方法//t.ShowD() 会报错 ambiguous selector t.ShowD//print People2:showDt.People2.ShowD()
}
原文:golang 使用组合的方式实现继承
这篇关于Go组合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!