区块链基础语言(二十)——Go语言结构体

栏目: Go · 发布时间: 7年前

内容简介:结构体概述Go语言结构体是一种聚合的数据类型,由一系列具有相同类型或不同类型的数据构成的数据集合。

1

结构体概述

Go语言结构体是一种聚合的数据类型,由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体的声明格式如图1所示,内部没有关键词var,每个数据称为结构体成员。例如,图1所示,利用结构体表示法,以一个班级为单位,记录这个班的班级名称,统计班级的总人数、男女生人数。

定义一个结构体需要用到两个关键词:type和struct。大括号内部是结构体类型的成员变量和变量类型。

区块链基础语言(二十)——Go语言结构体

2

结构体初始化

结构体的初始化,就是给结构体成员变量赋初值。结构体是由一系列具有相同类型或不同类型的数据(结构体成员)构成的数据集合。如果没有对结构体变量赋值、或者部分结构体成员变量没有被赋值,那么没有被赋值的成员变量取其对应类型的零值。

如果一个变量直接指向内存空间内存储的结构体类型值,那么这个变量就是结构体类型变量;如果一个变量存储的是指向结构体类型值的内存空间地址,这个变量就是结构体指针类型变量。

2.1 结构体类型变量的初始化

对一个结构体类型变量进行初始化有两种方式,如表1所示。

区块链基础语言(二十)——Go语言结构体

区块链基础语言(二十)——Go语言结构体

2.2 结构体指针类型变量的初始化

结构体指针类型变量的初始化方式和结构体类型变量的初始化方式类似。结构体指针类型就是在结构体类型之前加上“*”,赋值时在赋值之前加上取地址符“&”。同样,它有顺序初始化和指定成员初始化两种赋值方式。

区块链基础语言(二十)——Go语言结构体

3

匿名字段

结构体里的成员只有类型,没有变量名,这样的字段被称为匿名字段。

虽然匿名字段没有名称,但本质上是以类型名为名称的字段。

区块链基础语言(二十)——Go语言结构体

4

结构体成员的调用

4.1 结构体类型变量的成员调用

调用结构体类型变量的成员,需要用到点操作符“.”,即:

区块链基础语言(二十)——Go语言结构体

对被调用的结构体变量成员,既可以对其赋初值,也可以对它的值进行修改。

区块链基础语言(二十)——Go语言结构体

4.2 指针变量的成员的调用

对指针变量的成员调用方式有两种,如表2所示。

区块链基础语言(二十)——Go语言结构体
区块链基础语言(二十)——Go语言结构体

5

结构体类型变量的比较和赋值

5.1 结构体类型变量的比较

结构体类型变量可以使用“==”或“!=”运算符进行比较,但不支持“>”或“<”。

当两个结构体类型变量类型相同,相应的成员变量值相等,这两个结构体类型变量相等;否则,结构体类型变量不相等。

区块链基础语言(二十)——Go语言结构体

5.2 结构体类型变量的赋值

两个结构体类型变量类型相同,这两个变量可以相互赋值。

区块链基础语言(二十)——Go语言结构体

6

结构体类型变量作为函数参数

6.1 值传递

结构体是值类型,结构体类型变量作为函数参数,调用函数时将实际参数复制一份传递到函数中,在函数中对参数进行修改,实际参数不会受影响。

区块链基础语言(二十)——Go语言结构体

6.2 引用传递

将结构体类型变量的地址作为实际参数进行传递,在函数调用时实参传递到函数,在函数中对参数进行的修改,对实际参数有影响。

区块链基础语言(二十)——Go语言结构体

原文链接:区块链技术语言(二十)——Go语言结构体

参考资料

[1] 许式伟,吕桂华.Go语言编程[M].北京:人民邮电出版社,2012:68.

本文完,获取更多资讯,敬请关注区块链工程师。

区块链基础语言(二十)——Go语言结构体

来源:链块学院

本文由布洛克专栏作者发布,代表作者观点,版权归作者所有,不代表布洛克科技观点

——TheEnd——

关注“布洛克科技”

区块链基础语言(二十)——Go语言结构体


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++沉思录

C++沉思录

Andrew Koenig、Barbara Moo / 黄晓春、孟岩(审校) / 人民邮电出版社 / 2008-1 / 55.00元

《C++沉思录》基于作者在知名技术杂志发表的技术文章、世界各地发表的演讲以及斯坦福大学的课程讲义整理、写作而成,融聚了作者10多年C++程序生涯的真知灼见。全书分为6篇32章,分别对C++语言的历史和特点、类和继承、STL与泛型编程、库的设计等几大技术话题进行了详细而深入的讨论,细微之处几乎涵盖了C++所有的设计思想和技术细节。全书通过精心挑选的实例,向读者传达先进的程序设计的方法和理念。一起来看看 《C++沉思录》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器