继承 :当多个结构体存在相同的字段和方法时,可以从这些结构体中抽象出结构体,在该结构体中定义这些相同的字段和方法。可以解决代码复用问题,让我们的编程更加靠近人类的思维。
也就是说,在Golang中,如果一个struct嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承特性。
继承的好处 :
继承细节 :
案例:比如学生考试系统,小学生和大学生考试,有很多可以复用的代码,这时可以提取出来。
package main import "fmt" //编写一个学生考试系统 type Student struct { Name string Age int Score int } //将Pupil和Graduate共有的方法绑定到 *Student func (stu *Student) ShowInfo() { fmt.Printf("学生名:%v 年龄:%v 成绩:%v \n",stu.Name,stu.Age,stu.Score) } func (stu *Student) SetScore (score int){ //业务判断 stu.Score = score } //小学生 type Pupil struct { Student //嵌套了Student匿名结构体 } func (p *Pupil) testing() { fmt.Println("小学生正在考试中..") } //大学生 type Graduate struct { Student //嵌套了Student匿名结构体 } func (p *Graduate) testing() { fmt.Println("大学生正在考试中...") } func main() { //当我们对结构体嵌入了匿名结构体,使用方法会发生变化 pupil := &Pupil{} pupil.Student.Name = "tom" pupil.Student.Age = 8 pupil.testing() pupil.SetScore(80) pupil.Student.ShowInfo() graduate := &Graduate{} graduate.Student.Name = "mary" graduate.Student.Age = 24 graduate.testing() graduate.SetScore(95) graduate.Student.ShowInfo() }
执行结果如下图所示:
Go语言中 继承的理解和实现细节 (Golang经典编程案例)介绍到这里,更多Go学习请参考编程字典Go教程 和问答部分,谢谢大家对编程字典的支持。
原文链接:https://blog.csdn.net/cui_yonghua/article/details/94362727?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163479651116780366526677%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163479651116780366526677&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-19-94362727.pc_v2_rank_blog_default&utm_term=go&spm=1018.2226.3001.4450