区块链基础语言(二十)——Go语言结构体
一、结构体概述
Go语言结构体是一种聚合的数据类型,由一系列具有相同类型或不同类型的数据构成的数据集合。结构体的声明格式如图1所示,内部没有关键词var,每个数据称为结构体成员。例如,图1所示,利用结构体表示法,以一个班级为单位,记录这个班的班级名称,统计班级的总人数、男女生人数。定义一个结构体需要用到两个关键词:type和struct。大括号内部是结构体类型的成员变量和变量类型。
二、结构体初始化
结构体的初始化,就是给结构体成员变量赋初值。结构体是由一系列具有相同类型或不同类型的数据(结构体成员)构成的数据集合。如果没有对结构体变量赋值、或者部分结构体成员变量没有被赋值,那么没有被赋值的成员变量取其对应类型的零值。如果一个变量直接指向内存空间内存储的结构体类型值,那么这个变量就是结构体类型变量;如果一个变量存储的是指向结构体类型值的内存空间地址,这个变量就是结构体指针类型变量。
2.1 结构体类型变量的初始化
对一个结构体类型变量进行初始化有两种方式,如表1所示。
2.2 结构体指针类型变量的初始化
结构体指针类型变量的初始化方式和结构体类型变量的初始化方式类似。结构体指针类型就是在结构体类型之前加上“*”,赋值时在赋值之前加上取地址符“&”。同样,它有顺序初始化和指定成员初始化两种赋值方式。
三、匿名字段
结构体里的成员只有类型,没有变量名,这样的字段被称为匿名字段。虽然匿名字段没有名称,但本质上是以类型名为名称的字段。
四、结构体成员的调用
4.1 结构体类型变量的成员调用
调用结构体类型变量的成员,需要用到点操作符“.”,即:
对被调用的结构体变量成员,既可以对其赋初值,也可以对它的值进行修改。
4.2 指针变量的成员的调用
对指针变量的成员调用方式有两种,如表2所示。
五、结构体类型变量的比较和赋值
5.1 结构体类型变量的比较
结构体类型变量可以使用“==”或“!=”运算符进行比较,但不支持“>”或“<”。当两个结构体类型变量类型相同,相应的成员变量值相等,这两个结构体类型变量相等;否则,结构体类型变量不相等。
5.2 结构体类型变量的赋值
两个结构体类型变量类型相同,这两个变量可以相互赋值。
六、结构体类型变量作为函数参数
6.1 值传递
结构体是值类型,结构体类型变量作为函数参数,调用函数时将实际参数复制一份传递到函数中,在函数中对参数进行修改,实际参数不会受影响。
6.2 引用传递
将结构体类型变量的地址作为实际参数进行传递,在函数调用时实参传递到函数,在函数中对参数进行的修改,对实际参数有影响。
参考资料
[1] 许式伟,吕桂华.Go语言编程[M].北京:人民邮电出版社,2012:68.