61396-Go语言程序设计项目化教程(微课版)4.2 结构体进阶.pptx
-
资源ID:96686995
资源大小:538.05KB
全文页数:23页
- 资源格式: PPTX
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
61396-Go语言程序设计项目化教程(微课版)4.2 结构体进阶.pptx
结构体进阶结构体进阶结构体构造函数为任意类型添加方法01.04.目录结构体方法和接收器02.结构体比较03.JSON序列化05.01结构体构造函数值传递指针传递结构体做函数参数值传递指针传递(地址传递)Go 语言没有构造函数的功能使用结构体初始化的过程来模拟实现构造函数结构体可以像其他数据类型一样将结构体类型作为参数传递给函数Go语言中的构造函数1结构体构造函数结构体构造函数1结构体构造函数结构体构造函数type 类型名 struct 字段名1 字段类型1 字段名2 字段类型2 .func newfunc(变量名1 变量类型,变量名2 变量类型)*类型名 return&类型名 字段名1:变量1,字段名2:变量2,.Go语言中的构造函数语法Go语言的类型或结构体没有构造函数的功能,但是我们可以使用结构体初始化的过程来模拟实现构造函数。构造函数传入的变量类型需要与return返回结构体指针字段名类型一致构造函数可以只返回结构体中某些字段名package mainimport fmttype person struct name string age int/构造函数约定俗成用new开头/返回的是结构体还是结构体指针/当结构体比较大的时候使用结构体指针,减少程序内存的开销。func personOnlyName(name string)*person return&person name:name,/仅返回部分字段func newperson(name string,age int)*person return&person name:name,age:age,/返回所有字段func main()p1:=personOnlyName(Go语言)fmt.Println(p1)p2:=newperson(golang,20)fmt.Println(p2)运行结果:&Go语言 0&golang 201结构体构造函数结构体构造函数package mainimport fmttype person struct name string age intfunc print1(p person)p.name=值传递 fmt.Println(print1,p)func print2(p*person)p.name=指针传递 fmt.Println(print2,p)func main()p1:=personGo语言,20 print1(p1)/值传递,形参无法改实参 fmt.Println(p1)print2(&p1)/指针传递,形参可以改实参 fmt.Println(p1)运行结果:print1 值传递 20Go语言 20print2&指针传递 20指针传递 201结构体构造函数结构体构造函数02结构体方法和接收器无参数和返回值值类型接收者针类型接收者2结构体方法和接收器结构体方法和接收器Go语言的函数调用有接收器方法指针方法指针做为接收器值方法值作为接收器无接收器函数2结构体方法和接收器结构体方法和接收器func(结构体变量 结构体类型)方法名()函数体无参数和返回值func(接收者变量 接收者类型)方法名(参数列表)(返回参数)函数体值类型接收者func(接收者变量*接收者类型)方法名(参数列表)(返回参数)函数体指针类型接收者2结构体方法和接收器结构体方法和接收器func main()p:=personGo,20 p.print()p.change1(Golang)p.print()p.change2(Go语言)p.print()package mainimport fmttype person struct name string age intfunc(p person)print()fmt.Println(p)func(p person)change1(s string)p.name=sfunc(p*person)change2(s string)p.name=s运行结果为:Go 20Go 20Go语言 2003结构体比较结构体比较要求结构体比较符号3结构体比较结构体比较结构体比较结构体可以比较,也不可以比较 如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的如果包含slice、map、function不可比较类型时,那么结构体是不可以比较的可以比较的情况下:两个结构体将可以使用=或!=运算符进行比较,但不支持或同类型的两个结构体变量可以相互赋值结构体比较符号3结构体比较结构体比较package mainimport fmttype person struct name string age intfunc main()p1:=personGo语言,20 p2:=personGo语言,20 if p1=p2 fmt.Println(p1=p2)else fmt.Println(p1!=p2)运行结果为:p1=p23结构体比较结构体比较package mainimport fmttype person struct name string age intfunc main()p1:=personGo语言,int20 p2:=personGo语言,int20 if p1=p2 fmt.Println(p1=p2)else fmt.Println(p1!=p2)报错提示:invalid operation:p1=p2(struct containing int cannot be compared)不能比较包含int的结构体3结构体比较结构体比较package mainimport fmttype person1 struct name string age inttype person2 struct name string age intfunc main()p1:=person1Go语言,20 p2:=person2Go语言,20 if p1=p2 fmt.Println(p1=p2)else fmt.Println(p1!=p2)报错提示:invalid operation:p1=p2(mismatched types person1 and person2)结构体不同则不能比较3结构体比较结构体比较package mainimport fmttype person1 struct name string age inttype person2 struct name string age intfunc main()p1:=person1Go语言,20 p2:=person2Go语言,20 if p1=person1(p2)fmt.Println(p1=p2)else fmt.Println(p1!=p2)运行结果:p1=p2结构体内部相同时,可以使用强制转换来实现比较04为任意类型添加方法为任意类型添加方法为任意类型添加方法的语法4为任意类型添加方法为任意类型添加方法在Go语言中除了可以为结构体添加方法外,还可以为任意类型使用type定义别名之后,再为别名添加方法为任意类型添加方法type 别名 类型func(变量名 别名)方法名()函数体为任意类型添加方法语法type confirm string/confirm类型添加start()方法func(c confirm)start()fmt.Println(开始购物.)05JSON序列化JSON介绍JSON的特性序列化概念5JSONJSON序列化序列化 JSON采用完全独立于语言的文本格式,易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。目前,json已经成为主流的数据格式。JSON解析器和JSON库支持许多不同的编程语言。JSON文本格式在语法上与创建JavaScript对象的代码相同。JSON是存储和交换文本信息的语法。比XML更小、更快,更易解析。JSON具有自我描述性,语法简洁,易于理解。JSON数据主要有两种数据结构,一种是键/值,另一种是数组的形式来表示。JSON的特性JSON介绍5JSONJSON序列化序列化 数据在网络传输前后要进行序列化和反序列化。目的是将复杂的数据类型按照统一、简单且高效的形式转储,以达到网络传输的目的。除了在网络传输,有的数据存储到本地也是为了其它语言使用方便,通常也会使用相对来说较为通用的数据格式来存储,这就是我们常说的序列化,反序列化就是将数据按照规定的语法格式进行解析的过程。序列化概念谢谢观看谢谢观看