一、结构体概述

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.

转载于:https://www.cnblogs.com/efish/p/go-language-struct.html

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

  1. golang基础教程(十)、结构体

    golang基础教程 一.Golang 语言面向对象编程说明 Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对 象语言.所以我们说 Golang 支持面向 ...

  2. c++基础知识第十天:结构体嵌套结构体,结构体作函数参数

    一.结构体嵌套结构体 结构体内的成员可以是另一个结构体(访问时用.访问到不能访问为止) 1.例如:每个老师指导一个学员,一个老师的结构体中嵌套一个学生的结构体 #include<iostream ...

  3. golang 学习(二十四)结构体struct 和 json之间的转换

    结构体struct 和 json之间的转换 import ("encoding/json""fmt""math/rand""tes ...

  4. 【链块技术10期】区块链基础语言(二)——GO语言开发环境搭建

    ‍原文链接:区块链基础语言(二)--Go语言开发环境搭建 一.操作系统位数的查询方法‍ 在安装前首先要了解个人的电脑系统位数是32位还是64位. 1.1Windows系统查询方法 右击"计算 ...

  5. 40k~65k, 区块链架构师技能包一览: 多语言、多平台、多算法...别慌, 先投简历再说...

    戳蓝字"区块链大本营"关注我们哦! 每周日,「区块链大本营」人才快报与你不见不散!在这里,可以第一时间了解区块链的行业动态.技术风向与人才需求. 求职者请将个人简历以Word文档形 ...

  6. 【问链财经-区块链基础知识系列】 第四十四课 邮储银行:U链福费廷业务系统

    一.案例摘要 福费廷业务是银行根据客户或其他金融机构的要求,在开证行.包买行或其他指定银行对信用证项下的款项做出付款承诺后,对应收款进行无追索权的融资.邮储银行以企业级开源区块链平台 Hyperled ...

  7. 区块链用哪种语言 Java_区块链开发最适合用哪种语言?

    原标题:区块链开发最适合用哪种语言? 如今区块链技术的火热程度可谓是到了疯狂的地步,各大行业巨头也在加紧布局区块链,势必要上演一场"群雄逐鹿"的商业大战.那这场好戏什么时候上演?有 ...

  8. 【问链财经-区块链基础知识系列】 第四十六课 区块链如何作用于医药行业

    6月份的一则新闻引起人们很大的关注,"美国食品药品监督管理联合四大巨头公司:区块链平台提供公司IBM.世界最大零售公司沃尔玛.全球审计服务公司KPMG.世界上最悠久的制药公司Merck,建立 ...

  9. AIADATA 独家深度解密:百度XuperChain开源区块链基础平台

    AIADATA 独家深度解密:百度XuperChain开源区块链基础平台 百度超级链Xuperchain正式宣布开源.根据官网显示,链内并行技术.可插拔共识机制.一体化智能合约等四大技术支撑开源,让区 ...

  10. 区块链基础知识与关键技术解析

    区块链基础 1. 区块链的来龙去脉     1.1 区块链技术起源     1.2 比特币产生背景与现状     1.3 数字货币概念     1.4 比特币技术原理 2. 区块链概念与产业现状   ...

最新文章

  1. [k8s] 第七章 Service详解
  2. 第二十六天 iptables的nat功能
  3. 国内云存储产品应用简介
  4. Java7并发编程指南——第六章:并发集合
  5. OutLook 2010 (Bata) 中的邮件导出功能
  6. 用java二分法计算a的n次幂_用二分法计算a的n次幂算法分析
  7. WINDOW7下 配置APACHE+PHP 无法加载MYSQL 的问题
  8. [org/springframework/jdbc/support/sql-error-codes.xml]
  9. 48. Be aware of template metaprogramming
  10. 拓端tecdat|R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
  11. c 打印二叉树_二叉树遍历(非递归和递归实现)
  12. VS2010-MFC(常用控件:标签控件Tab Control 下)
  13. 用BeautifulSoup爬取豆瓣妹子的图片
  14. Unity开发 解决TapTap隐私协议
  15. Ubuntu18中添加中文输入法
  16. 突然就看懂了《大话西游》
  17. 互不相容的零缺陷与全面质量管理
  18. mycat与mysql proxy_高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)...
  19. React 安装 node-sass失败解决方案
  20. Word 2003操作技巧之改变默认字体及恢复方法

热门文章

  1. Mysql 索引问题-日期索引使用
  2. Thread之四:java线程返回结果的方法
  3. mac 下设置 sublime text2 的命令行快捷方式 subl
  4. android UI进阶之布局的优化
  5. 软件测试——闭着眼睛测试软件
  6. Shel脚本-初步入门之《02》
  7. 物化视图(materialized view) 实现数据迁移、数据定时同步
  8. Jsoup解析网页html
  9. Javascript中try finally的细微差别
  10. Python: names, values, assignment and mutability