区块链技术语言(二十):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语言社区”。
相关文章
|
5月前
|
供应链 安全 算法
区块链技术探索与应用:从密码学奇迹到产业变革引擎
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。以代码为舟,算法为帆,在区块链的浩瀚星河中探索去中心化的未来。从智能合约到DeFi,用极客精神谱写信任新篇章。
区块链技术探索与应用:从密码学奇迹到产业变革引擎
|
5月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
307 2
|
6月前
|
人工智能 安全 数据可视化
数字孪生 + 区块链:MyEMS 引领能源管理技术融合新趋势
MyEMS融合数字孪生与区块链技术,打造可信、透明、高效的能源管理新范式。通过实时镜像、智能预测与数据上链,实现能耗可追溯、碳排可验证、交易可信任,推动能源管理迈向智能化与价值化新时代。(238字)
271 1
|
7月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
444 1
|
7月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
499 0
|
7月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
338 0
|
7月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
376 0
|
7月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
422 0
|
7月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
7月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。