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

简介:

Go语言结构体是一种聚合的数据类型,本文从六个角度为大家详解了Go语言结构体的相关概念。

一、结构体概述

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

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

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

204a464017e41bedb5c32c9f92391951953312cd

二、结构体初始化

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

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

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

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

e4d40637ae16f2ea2dd57592581f163181782e3d

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

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

11ecb5ae22c186aab089e918bb46397340700946

三、匿名字段

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

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

f6393f82865cf4ba59bee7b6dd28ae7c5c884a15

四、结构体成员的调用

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

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

3d855f3bb06cb1d46a21a57a2ce9957c8ed0ff94

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

26f8a92c2c4c00070566140f50bc60744a4e9b1a

4.2 指针变量的成员的调用

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

b5627ba17b29b76d50e320c567e53472293c4ec5

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

5.1 结构体类型变量的比较

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

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

776d9915a2eb7dc7baf11f592a95e14b3360faca

5.2 结构体类型变量的赋值

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

d49064b4ba27351dcd65b0c60f5f97dcd6d8cfb0

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

6.1 值传递

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

26ce0702987cfaf2b80e73b2bd98597d2d1ededb

6.2 引用传递

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

101bac95b14949b65aab4885fbb182f90a5e444d



原文发布时间为:2018-09-15
本文来自云栖社区合作伙伴“ Golang语言社区”,了解相关信息可以关注“ Golang语言社区”。
相关文章
|
2天前
|
存储 供应链 安全
探索区块链技术在供应链管理中的应用
本文深入探讨了区块链技术在供应链管理中的应用,分析了其如何提高透明度、安全性和效率。通过具体案例研究,展示了区块链如何解决传统供应链中的信任问题,降低成本,并促进更高效的物流管理。文章还讨论了实施区块链技术面临的挑战和未来发展趋势。
|
3天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
16 4
|
3天前
|
存储 供应链 区块链
区块链技术在供应链管理中的应用与实践
区块链技术在供应链管理中的应用与实践
|
3天前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
27 1
|
6天前
|
Go
go语言中的continue 语句
go语言中的continue 语句
17 3
|
7天前
|
安全 Go 调度
探索Go语言的并发模型:goroutine与channel
在这个快节奏的技术世界中,Go语言以其简洁的并发模型脱颖而出。本文将带你深入了解Go语言的goroutine和channel,这两个核心特性如何协同工作,以实现高效、简洁的并发编程。
|
6天前
|
供应链 区块链 数据安全/隐私保护
区块链技术在供应链管理中的革新应用
区块链技术在供应链管理中的革新应用
|
8天前
|
供应链 安全 物联网
区块链技术的未来展望:重塑信任与价值传递
区块链技术的未来展望:重塑信任与价值传递
21 1
|
1天前
|
存储 Go PHP
Go语言中的加解密利器:go-crypto库全解析
在软件开发中,数据安全和隐私保护至关重要。`go-crypto` 是一个专为 Golang 设计的加密解密工具库,支持 AES 和 RSA 等加密算法,帮助开发者轻松实现数据的加密和解密,保障数据传输和存储的安全性。本文将详细介绍 `go-crypto` 的安装、特性及应用实例。
11 0
|
5天前
|
供应链 区块链 数据安全/隐私保护
区块链技术在供应链管理中的应用与挑战
区块链技术在供应链管理中的应用与挑战
10 0
下一篇
无影云桌面