继承可以解决代码复用,让我们的编程更加靠近人类思维。当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出结构体(比如刚才的 Student),在该结构体中定义这些相同的属性和方法。 其它的结构体不需要重新定义这些属性(字段)和方法,只需嵌套一个Student匿名结构体即可。〔画出示意图〕 也就是说:在Golang中,如果一个struct嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承特性。 嵌套匿名结构体的基本语法 typeGoodsstruct{ Namestring Priceint } typeBookstruct{ Goods这里就是嵌套匿名结构体GoodsWriterstring } 快速入门案例 案例 我们对extends01。go改进,使用嵌套匿名结构体的方式来实现继承特性,请大家注意体会这样编程 的好处 代码实现 packagemain import( fmt ) 编写一个学生考试系统typeStudentstruct{ NamestringAgeintScoreint } 将Pupil和Graduate共有的方法也绑定到Studentfunc(stuStudent)ShowInfo(){ fmt。Printf(学生名v年龄v成绩v,stu。Name,stu。Age,stu。Score) } func(stuStudent)SetScore(scoreint){ 业务判断stu。Scorescore } 小学生 typePupilstruct{ Student嵌入了Student匿名结构体 } 显示他的成绩 这时Pupil结构体特有的方法,保留 func(pPupil)testing(){fmt。Println(小学生正在考试中。。。。。) } 大学生,研究生 大学生 typeGraduatestruct{ Student嵌入了Student匿名结构体 } 显示他的成绩 这时Graduate结构体特有的方法,保留 func(pGraduate)testing(){fmt。Println(大学生正在考试中。。。。。) } 代码冗余。。高中生。。。。funcmain(){ 当我们对结构体嵌入了匿名结构体使用方法会发生变化pupil:Pupil{} pupil。Student。Nametompupil。Student。Age8pupil。testing()pupil。Student。SetScore(70)pupil。Student。ShowInfo() graduate:Graduate{}graduate。Student。Namemarygraduate。Student。Age28graduate。testing()graduate。Student。SetScore(90)graduate。Student。ShowInfo()