结构体结构体定义初始化结构体变量实例化结构体01.03.02.目录匿名结构体04.01结构体定义•结构体定义•结构体语法格式1结构体定义结构体的定义•Go语言中没有“类”的概念,通过struct来实现面向对象•通常用于表达一个事物的全部或部分属性•是一种自定义数据类型,可以封装多个基本数据类型•本质是将零个或者多个任意类型的命名变量组合在一起的聚合数据类型•每个变量叫做结构体的成员,变量名必须唯一,可用“_”补位•支持使用自身指针类型成员type类型名struct{字段名字段类型字段名字段类型......}结构体语法格式•类型名:标识自定义结构体的名称,在同一个包内不能重复。•字段名:表示结构体字段名,结构体中的字段名必须唯一。•字段类型:表示结构体字段的具体类型。typeStudentstruct{stuIDintstuNamestringageint}//成员变量通常一行写一个,变量的名称在类型的前面结构体案列typeStudentstruct{stuID,ageintstuNamestring}//相同类型的连续成员变量可以写在一行上。结构体案列1结构体定义typeStudent1struct{stuId,ageintstuName,addressstringclass,teacherstring}typeStudent2struct{stuIdintaddress,stuNamestringageintclass,teacherstring}•成员变量的顺序对于结构体同一性很重要•相同类型的不连续成员变量不可以写在一行上1结构体定义02实例化结构体•结构体的使用•结构体实例化语法•new关键字2实例化结构体结构体的使用•结构体属于数据类型,因此和声明Go语言内置数据类型一样使用var关键字声明结构体类型•只有当结构体实例化时,才会真正地分配内存•即必须实例化后才能使用结构体的字段packagemainimport"fmt"funcmain(){typepersonstruct{namestringcitystringageint8}varp1person//实例化结构体}实例化语法var结构体实例结构体类型packagemainimport"fmt"funcmain(){varp1struct{namestring;citystring;ageint}}在定义一些临时数据结构等场景下还可以使用匿名结构体2实例化结构体packagemainimport"fmt"funcmain(){typepersonstruct{namestringcitystringageint8}varp1=new(person)}2实例化结构体new关键字实例化语法结构体实例:=new(结构体类型)•使用new实例化结构体后,得到的是结构体的地址;结构体类型为指针类型•通过&符号对结构体取地址•取地址的同时会将结构体实例化03初始化结构体变量•顺序初始化•指定初始化•结构体普通变量•结构体指针变量3初始化结构体变量结构体初始化•结构体类型的值可以通过结构体字面量来设置,即通过结构体的成员变量来设置•有两种格式的结构体字面量:顺序初始化、指定成员初始化•要求顺序为每个成员变量指定一个值,这种格式必须记住每个成员变量的顺序结构体顺序初始化•通过指定部分或者全部成员变量的名称和值来初始化结构体变量,如果成员被忽略的话将默认用零值结构体指定成员初始化结构体初始化的几种情况结构体定义时,结构体中的值会根据字段类型被赋予一个默认值使用键值对对结构体进行初始化时,键对应结构体的字段,值对应该字段的初始值初始化结构体的时候可以简写,也就是初始化的时候不写键,直接写值3初始化结构体变量3初始化结构体变量packagemainimport("fmt")funcmain(){typepersonstruct{namestringcitystringageint8}//顺序初始化,每个成员必须初始化varp1personp1.name="Go语言"p1.city="深圳"p1.age=18fmt.Println(p1)//指定成员初始化,没有初始化的成员自动赋值为零p2:=person{name:"Golang"}fmt.Println(p2)}运行结果为:{Go语言深圳18}{Golang0}3初始化结构体变量packagemainimport("fmt")funcmain(){typepersonstruct{namestringcitystringageint8}//顺序初始化,每个成员必须初始化varp1*person=&person{"Go语言","深圳",18}fmt.Println(*p1)//指定成员初始化,没有初始化的成员自动赋值为零p2:=&person{name:"Golang"}fmt.Println(*p2)}运行结果为:{Go语言深圳18}{Golang0}3初始化结构体变量结构体成员变量的使用结构体普通变量定义结构体普通变量使用(.)运算符操作成员结构体指针变量先定义一个普通结构体变量s,再定义一个指针变量p1存放s的地址,通过指针操作成员...