电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

61396-Go语言程序设计项目化教程(微课版)4.3 结构体内嵌VIP免费

61396-Go语言程序设计项目化教程(微课版)4.3 结构体内嵌_第1页
61396-Go语言程序设计项目化教程(微课版)4.3 结构体内嵌_第2页
61396-Go语言程序设计项目化教程(微课版)4.3 结构体内嵌_第3页
结构体内嵌结构体内嵌初始化内嵌结构体01.02.目录结构体实现“继承”案例03.结构体标签04.01结构体内嵌•结构体内嵌语法•结构体内嵌特性1结构体内嵌type结构体1struct{字段名1字段类型1字段名2字段类型2}type结构体2struct{结构体1字段名3字段类型3}结构体内嵌语法是一种组合特性使用结构体内嵌可构建一种面向对象编程思想中的继承关系结构体实例化后,可直接访问内嵌结构体的所有成员变量和方法结构体内嵌特性1结构体内嵌//定义关于圆心坐标、圆、圆柱的结构体:typePointstruct{x,yint}typeCirclestruct{x,y,rint}typeCylinderstruct{x,y,r,hint}//嵌入相同部分:typePointstruct{x,yint}typeCirclestruct{PPointrint}typeCylinderstruct{CCirclehint}02初始化内嵌结构体•键值对形式•多值列表形式结构体初始化键值对形式适合选择性填充字段较多的结构体多值列表形式适合填充字段较少的结构体2初始化内嵌结构体type结构体1struct{字段名1字段类型1字段名2字段类型2}type结构体2struct{结构体1字段名3字段类型3}键值对初始化2初始化内嵌结构体funcmain(){结构体实例:=结构体2{结构体1{字段名1:字段名1值字段名2:字段名2值},字段名3:字段名3值}}•键值对之间以逗号分割•键值之间以冒号分割•结构体成员的字段名应该具有唯一性2初始化内嵌结构体packagemainimport"fmt"typerectanglestruct{length,wideint}typecuboidstruct{rrectanglehighint}funcmain(){c:=cuboid{r:rectangle{length:5,wide:6,},high:7,}fmt.Println(c.r.length)fmt.Println(c.r.wide)fmt.Println(c.high)}运行结果为:567当访问结构体成员时会先在结构体中查找该字段,找不到再去匿名结构体中查找,但嵌套结构体内部可能存在相同的字段名。这个时候为了避免歧义需要指定具体的内嵌结构体的字段。type结构体1struct{字段名1字段类型1字段名2字段类型2}type结构体2struct{结构体1字段名3字段类型3}多值列表初始化2初始化内嵌结构体funcmain(){结构体实例:=结构体2{结构体1{字段名1值字段名2值},字段名3值}}•必须初始化结构体所有字段•每一个初始值的填充顺序必须与字段在结构体中的声明顺序一致•键值对与多值列表的初始化形式不能混用2初始化内嵌结构体packagemainimport"fmt"typerectanglestruct{length,wideint}typecuboidstruct{rrectanglehighint}funcmain(){c:=cuboid{rectangle{5,6,},7,}fmt.Println(c.r.length)fmt.Println(c.r.wide)fmt.Println(c.high)}运行结果为:56703结构体实现“继承”案例•通过嵌套匿名结构体实现继承3结构体实现“继承”案例packagemainimport"fmt"//Animal动物typeAnimalstruct{namestring}func(a*Animal)move(){fmt.Printf("%s会动!\n",a.name)}//Dog狗typeDogstruct{Feetint8*Animal//通过嵌套匿名结构体实现继承}func(d*Dog)wang(){fmt.Printf("%s会汪汪汪~\n",d.name)}funcmain(){d1:=&Dog{Feet:4,Animal:&Animal{//注意嵌套的是结构体指针name:"乐乐",},}d1.wang()d1.move()}运行结果为:乐乐会汪汪汪~乐乐会动!04结构体标签•结构体标签定义•结构体标签语法•可以通过reflect.Type的Field()方法返回reflect.StructField结构,该结构描述了结构体的成员信息,其中的Tag被称为结构体标签(StructTag)。•结构体标签是结构体的元信息,是对结构体字段的额外信息标签。•Tag是结构体在编译阶段关联到成员的元信息字符串,在运行的时候通过反射的机制读取出来。结构体标签定义结构体标签语法`key1:"value1"key2:"value2"key3:"value3"...`4结构体标签packagemainimport("encoding/json""fmt")typeStudentstruct{IDint`json:"id"`//通过指定tag实现json序列化该字段时的keyGenderstring//json序列化是默认使用字段名作为keynamestring//私有不能被json包访问}funcmain(){s1:=Student{ID:1,Gender:"女",name:"pprof",}data,err:=json.Marshal(s1)iferr!=nil{fmt.Println("jsonmarshalfailed!")return}fmt.Printf("jsonstr:%s\n",data)}运行结果为:jsonstr:{"id":1,"Gender":"女"}4结构体标签谢谢观看

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部