61396-Go语言程序设计项目化教程(微课版)4.4 接口与结构体.pptx
-
资源ID:96687004
资源大小:526.52KB
全文页数:21页
- 资源格式: PPTX
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
61396-Go语言程序设计项目化教程(微课版)4.4 接口与结构体.pptx
接口与结构体接口与结构体接口声明接口的嵌套接口与结构体01.03.02.目录类型断言04.01接口声明接口定义接口特点接口格式空接口error接口接口是对类型行为的约定接口是一系列方法的集合接口是一种高度抽象的数据类型接口中的方法不包含代码接口中的方法是抽象的接口中不包含变量本质是一种关于对象功能的约定接口的定义接口是双方约定的一种合作协议,接口实现者不需要关心接口会怎样被使用,只需要实现接口里面所有的方法即可接口不支持直接实例化,只能通过具体的类来实现声明的所有方法,同时函数的函数名、函数参数和函数返回值必须完全一样Go语言中的接口支持赋值操作,从而快速实现接口与实现类的映射接口的特点1接口声明接口声明type接口类型名interface方法名1(参数列表1)返回值列表1方法名2(参数列表2)返回值列表2.标准格式声明接口接口类型名:使用type将接口定义为自定义的类型名,接口在命名时,一般会在单词后面添加er;方法名:当方法名首字母是大写时,同时接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问;参数列表:表示传入到方法中的值;返回值列表:方法返回值。typePhoneinterfacecall()SendMsg(msgstring)bool语法要点1接口声明接口声明type接口类型名interface方法名1(参数列表1)返回值列表1方法名2(参数列表2)返回值列表2.type(变量名类型)方法名1(参数列表1)返回值列表1type(变量名类型)方法名2(参数列表2)返回值列表2标准格式接口的实现/标准格式接口的实现案列typeAndroidPhonestructfunc(aAndroidPhone)call()fmt.Println(AndroidPhonecalling)func(aAndroidPhone)SendMsg(msgstring)boolfmt.Println(AndroidPhonesendingmsg)returntrue1接口声明接口声明是接口类型的特殊形式空接口没有任何方法,因此任何类型都无须实现空接口从实现的角度看,任何值都满足这个接口的需求空接口类型可以保存任何值,也可以从空接口中取出原值空接口packagemainimportfmtfuncmain()varanyinterfaceany=1fmt.Println(any)any=hellofmt.Println(any)any=falsefmt.Println(any)1接口声明接口声明运行结果为:1hellofalse作为错误处理的标准模式如果函数要返回错误,则返回值类型列表中肯定包含errorerror处理过程类似于C语言中的错误码,可逐层返回,直到被处理error接口packagemainimport(errorsfmtmath)funcSqrt(ffloat64)(float64,error)iff0return-1,errors.New(开平方根的数字不能小于0)returnmath.Sqrt(f),nilfuncmain()result,err:=Sqrt(-13)iferr!=nilfmt.Println(err)elsefmt.Println(result)1接口声明接口声明运行结果为:开平方根的数字不能小于002接口与结构体接口与结构体的关系一个结构体类型实现多个接口一个接口被多个结构体实现接口与结构体关系接口和结构体类型之间是多对多的关系一个结构体类型可以实现多个接口一个接口也可以被多个结构体类型所实现2接口与结构体接口与结构体type接口类型名1interface方法名1(参数列表1)返回值列表1type接口类型名2interface方法名2(参数列表2)返回值列表2一个结构体类型实现多个接口2接口与结构体接口与结构体type结构体struct字段名1字段类型1字段名2字段类型2type(结构体名结构体)方法名1(参数列表1)返回值列表1type(结构体名结构体)方法名2(参数列表2)返回值列表22接口与结构体接口与结构体packagemainimportfmttyperuninterfacerunning(timeint)inttypeeatinterfaceeating(foodstring)inttypepersonstructweightintfunc(p*person)running(timeint)intp.weight-=time/5returnp.weightfunc(p*person)eating(foodstring)intp.weight+=1returnp.weightfuncmain()p1:=&personweight:50,fmt.Println(p1.weight)p1.running(20)fmt.Println(p1.weight)p1.eating(面包)fmt.Println(p1.weight)运行结果为:5046472接口与结构体接口与结构体一个接口被多个结构体实现type接口类型名interface方法名1(参数列表1)返回值列表1方法名2(参数列表2)返回值列表2type结构体1struct字段名1字段类型1type结构体2struct字段名2字段类型2type结构体3struct字段名3字段类型3type(结构体名1结构体1)方法名1(参数列表1)返回值列表1type(结构体名2结构体2)方法名2(参数列表2)返回值列表2type(结构体名3结构体3)方法名2(参数列表2)返回值列表22接口与结构体接口与结构体packagemainimportfmttypewhointerfacewho(positionstring)stringtypetearcherstructpositionstringnamestringtypestudentstructpositionstringnamestringfunc(t*tearcher)who(namestring)stringt.position=教师t.name=namereturnt.positionfunc(s*student)who(namestring)strings.position=学生s.name=namereturns.positionfuncmain()vartwho=&tearcherposition:未知,name:未知,t.who(Go)fmt.Println(t)varswho=&studentposition:未知,name:未知,s.who(go)fmt.Println(s)运行结果为:&教师Go&学生go03接口的嵌套接口嵌套定义接口嵌套格式3接口的嵌套接口的嵌套在Go语言中,不仅仅结构体与结构体之间可以嵌套,接口与接口之间也可以嵌套,被包含的接口中的所有方法都会被包含到新的接口中。接口嵌套接口嵌套格式type接口类型名1interface方法名1()type接口类型名2interface方法名2()type接口类型名3interface接口类型名1接口类型名2方法名3()3接口的嵌套接口的嵌套/接口嵌套typequeueinterface height()typeruninterface weight()typeBMIinterface queuerun age()/接口未嵌套typequeueinterfaceheight()typeruninterfaceweight()typeBMIinterfaceheight()weight()age()一个接口可以包含一个或多个其他的接口,这相当于直接将这些内嵌接口的方法列举在外层接口中一样。只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用。04类型断言类型断言介绍类型断言语法4类型断言类型断言类型断言语法value,ok:=x.(T)其中:value表示返回x的值;ok是一个布尔值,用于判断x是否为T类型;x表示一个接口的类型;T表示一个具体的类型(也可为接口类型)需要注意的是:如果T是具体某个类型,类型断言会检查x的动态类型是否等于具体类型T。如果检查成功,类型断言返回的结果是x的动态值,其类型是T。如果T是接口类型,类型断言会检查x的动态类型是否满足T。如果检查成功,x的动态值不会被提取,返回值是一个类型为T的接口值。无论T是什么类型,如果x是nil接口值,类型断言都会失败。类型断言是使用在接口变量上的操作。检查它操作对象的动态类型是否和断言的类型匹配其目的是用于检查接口类型变量所持有的值是否实现了期望的接口或者具体的类型。类型断言介绍4类型断言类型断言packagemainimportfmtfuncmain()varanyinterfaceany=神舟十四号title:=any.(string)fmt.Printf(中国载人航天工程发射的第十四艘飞船简称:%sn,title)运行结果为:中国载人航天工程发射的第十四艘飞船简称:神舟十四号packagemainimportfmtfuncmain()varxinterfacex=100value,ok:=x.(int)fmt.Println(x的值是:,value)fmt.Println(x的类型是否为int:,ok)运行结果为:x的值是:100 x的类型是否为int:true谢谢观看谢谢观看