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

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

61396-Go语言程序设计项目化教程(微课版)4.2 结构体进阶_第1页
61396-Go语言程序设计项目化教程(微课版)4.2 结构体进阶_第2页
61396-Go语言程序设计项目化教程(微课版)4.2 结构体进阶_第3页
结构体进阶结构体构造函数为任意类型添加方法01.04.目录结构体方法和接收器02.结构体比较03.JSON序列化05.01结构体构造函数•值传递•指针传递结构体做函数参数值传递指针传递(地址传递)•Go语言没有构造函数的功能•使用结构体初始化的过程来模拟实现构造函数•结构体可以像其他数据类型一样将结构体类型作为参数传递给函数Go语言中的构造函数1结构体构造函数1结构体构造函数type类型名struct{字段名1字段类型1字段名2字段类型2......}funcnewfunc(变量名1变量类型,变量名2变量类型……)*类型名{return&类型名{字段名1:变量1,字段名2:变量2,......}}Go语言中的构造函数语法•Go语言的类型或结构体没有构造函数的功能,但是我们可以使用结构体初始化的过程来模拟实现构造函数。•构造函数传入的变量类型需要与return返回结构体指针字段名类型一致•构造函数可以只返回结构体中某些字段名packagemainimport"fmt"typepersonstruct{namestringageint}//构造函数约定俗成用new开头//返回的是结构体还是结构体指针//当结构体比较大的时候使用结构体指针,减少程序内存的开销。funcpersonOnlyName(namestring)*person{return&person{name:name,}//仅返回部分字段}funcnewperson(namestring,ageint)*person{return&person{name:name,age:age,}//返回所有字段}funcmain(){p1:=personOnlyName("Go语言")fmt.Println(p1)p2:=newperson("golang",20)fmt.Println(p2)}运行结果:&{Go语言0}&{golang20}1结构体构造函数packagemainimport"fmt"typepersonstruct{namestringageint}funcprint1(pperson){p.name="值传递"fmt.Println("print1",p)}funcprint2(p*person){p.name="指针传递"fmt.Println("print2",p)}funcmain(){p1:=person{"Go语言",20}print1(p1)//值传递,形参无法改实参fmt.Println(p1)print2(&p1)//指针传递,形参可以改实参fmt.Println(p1)}运行结果:print1{值传递20}{Go语言20}print2&{指针传递20}{指针传递20}1结构体构造函数02结构体方法和接收器•无参数和返回值•值类型接收者•针类型接收者2结构体方法和接收器Go语言的函数调用有接收器方法指针方法指针做为接收器值方法值作为接收器无接收器函数2结构体方法和接收器func(结构体变量结构体类型)方法名(){函数体}无参数和返回值func(接收者变量接收者类型)方法名(参数列表)(返回参数){函数体}值类型接收者func(接收者变量*接收者类型)方法名(参数列表)(返回参数){函数体}指针类型接收者2结构体方法和接收器funcmain(){p:=person{"Go",20}p.print()p.change1("Golang")p.print()p.change2("Go语言")p.print()}packagemainimport"fmt"typepersonstruct{namestringageint}func(pperson)print(){fmt.Println(p)}func(pperson)change1(sstring){p.name=s}func(p*person)change2(sstring){p.name=s}运行结果为:{Go20}{Go20}{Go语言20}03结构体比较•结构体比较要求•结构体比较符号3结构体比较结构体比较•结构体可以比较,也不可以比较•如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的•如果包含slice、map、function不可比较类型时,那么结构体是不可以比较的•可以比较的情况下:两个结构体将可以使用==或!=运算符进行比较,但不支持>或<•同类型的两个结构体变量可以相互赋值结构体比较符号3结构体比较packagemainimport"fmt"typepersonstruct{namestringageint}funcmain(){p1:=person{"Go语言",20}p2:=person{"Go语言",20}ifp1==p2{fmt.Println("p1=p2")}else{fmt.Println("p1!=p2")}}运行结果为:p1=p23结构体比较packagemainimport"fmt"typepersonstruct{namestringage[]int}funcmain(){p1:=person{"Go语言",[]int{20}}p2:=person{"Go语言",[]int{20}}ifp1==p2{fmt.Println("p1=p2")}else{fmt.Println("p1!=p2")}}报错提示:invalidoperation:p1==p2(structcontaining[]intcannotbecompared)不能比较包含[]int的结构体3结构体比较packagemainimport"fmt"typeperson1struct{namestringageint}typeperson2struct{namestringageint}funcmain(){p1:=person1{"Go语言",20}p2:=person2{"Go语言",20}ifp1==p2...

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

碎片内容

最好的沉淀+ 关注
实名认证
内容提供者

行业文档

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