Go 语言编程 — 高级数据类型 — 结构体
目录
文章目录
- 目录
- 结构体
- 访问结构体成员
- 向函数传递结构体
- 结构体指针
- 结构体标签(Struct Tag)
结构体
Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。与 C 语言中的结构体类似,区别在于 Golang 结构体的操作更加精简,方式更加单一。同时,Golang 中结构体变量也类似于 OOP 中对象的概念,可以具有对象的成员属性和成员方法。
结构体的定义使用了 type 和 struct 关键字。
- type 关键字:设定了结构体的名称,表示定义一个新的类型(Type)。
- struct 关键字:表示定义一个新的结构体数据类型,结构体中有一个或多个成员。
结构体的格式如下:
type struct_variable_type struct {member definition...
}
一旦定义了结构体类型,就能用作变量声明的类型标识符,与声明基础数据类型的变量无异。格式:
variable_name := structure_variable_type {value1, value2, ..., valueN}
// or
variable_name := structure_variable_type { key1: value1, key2: value2, ..., keyn: valuen}
示例:
package mainimport "fmt"type book_s struct {title stringauthor stringsubject stringbook_id int
}func main() {/* 全值形式定义结构体。 */book1 := book_s {"Go 语言", "fanguiju", "Go 语言编程", 1}fmt.Println(book1)/* key/value 形式定义结构体。 */book2 := book_s {title: "Go 语言", author: "fanguiju", subject: "Go 语言编程", book_id: 1}fmt.Println(book2)/* 缺省形式定义结构体。 */book3 := book_s {title: "Go 语言", author: "fanguiju"}fmt.Println(book3)
}
结果:
{Go 语言 fanguiju Go 语言编程 1}
{Go 语言 fanguiju Go 语言编程 1}
{Go 语言 fanguiju 0}
访问结构体成员
使用 .
成员访问符,来访问结构体的成员。
package mainimport "fmt"type book_s struct {title stringauthor stringsubject stringbook_id int
}func main() {var book1 book_sbook1.title = "Go 语言"book1.author = "fanguiju"book1.subject = "Go 语言编程"book1.book_id = 1fmt.Printf( "Book 1 title : %s\n", book1.title)fmt.Printf( "Book 1 author : %s\n", book1.author)fmt.Printf( "Book 1 subject : %s\n", book1.subject)fmt.Printf( "Book 1 book_id : %d\n", book1.book_id)
}
结果:
Book 1 title : Go 语言
Book 1 author : fanguiju
Book 1 subject : Go 语言编程
Book 1 book_id : 1
向函数传递结构体
你可以像其他数据类型一样将结构体类型变量作为参数传递给函数,结构体是作为实参时采用的是值传递。
package mainimport "fmt"type book_s struct {title stringauthor stringsubject stringbook_id int
}func print_book_infos(book book_s) {fmt.Printf( "Book title: %s\n", book.title)fmt.Printf( "Book author: %s\n", book.author)fmt.Printf( "Book subject: %s\n", book.subject)fmt.Printf( "Book book_id: %d\n", book.book_id)
}func main() {var book1 book_sbook1.title = "Go 语言"book1.author = "fanguiju"book1.subject = "Go 语言编程"book1.book_id = 1print_book_infos(book1)
}
结果:
Book title: Go 语言
Book author: fanguiju
Book subject: Go 语言编程
Book book_id: 1
结构体指针
相对的,将结构体指针类型变量作为函数实参传入时,肯定是引用语义的。Golang 中访问结构体指针类型变量的成员时,依然使用成员访问符 .
,而不像 C 语言那样会有特殊的地址访问符 ->
。
示例:
package mainimport "fmt"type book_s struct {title stringauthor stringsubject stringbook_id int
}func print_book_infos(book *book_s) {fmt.Println( "Book title: %s", book.title)fmt.Println( "Book author: %s", book.author)fmt.Println( "Book subject: %s", book.subject)fmt.Println( "Book book_id: %d", book.book_id)
}func change(book *book_s) {book.book_id = 2
}func main() {var book1 book_sbook1.title = "Go 语言"book1.author = "fanguiju"book1.subject = "Go 语言编程"book1.book_id = 1print_book_infos(&book1)fmt.Println("---------")change(&book1)print_book_infos(&book1)
}
结果:
Book title: %s Go 语言
Book author: %s fanguiju
Book subject: %s Go 语言编程
Book book_id: %d 1
---------
Book title: %s Go 语言
Book author: %s fanguiju
Book subject: %s Go 语言编程
Book book_id: %d 2
结构体标签(Struct Tag)
《Go 语言编程 — reflect 反射工具》
Go 语言编程 — 高级数据类型 — 结构体相关推荐
- C 语言编程 — 高级数据类型 — 结构体与位域
目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...
- C 语言编程 — 高级数据类型 — 共用体
目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...
- C 语言编程 — 高级数据类型 — void 类型
目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...
- C 语言编程 — 高级数据类型 — 字符串
目录 文章目录 目录 前文列表 字符串 字符串拷贝 字符串比较 strcmp strncmp 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> &l ...
- C 语言编程 — 高级数据类型 — 枚举
目录 文章目录 目录 前文列表 声明枚举类型 定义枚举类型的变量 枚举类型变量的枚举值 枚举在 switch 语句中的使用 将整型转换为枚举类型 前文列表 <程序编译流程与 GCC 编译器> ...
- C 语言编程 — 高级数据类型 — 数组
目录 文章目录 目录 前文列表 数组 声明数组 初始化数据 访问数组元素 二维数组 指向数组的指针 将数组指针作为实参传入函数 从函数返回一个数组指针 指针数组 数组名和取数组首地址的区别 前文列表 ...
- C 语言编程 — 高级数据类型 — 指针
目录 文章目录 目录 前文列表 指针 声明一个指针变量 使用指针 空指针 悬空指针 野指针 指针的算术运算 指向指针的指针 将指针作为实际参数传入函数 从函数返回指针 一个古老的笑话 前文列表 < ...
- Go 语言编程 — 高级数据类型 — Interface、多态、Duck Typing 与泛式编程
目录 文章目录 目录 Golang 的接口 Interface 实例存储的是实现者的值 如何判断某个 Interface 实例的实际类型 Empty Interface Interface 与多态 I ...
- Go 语言编程 — 高级数据类型 — 数组
目录 文章目录 目录 数组 定义数组 数组与切片的区别 访问数组元素 多维数组 初始化二维数组 访问二维数组 向函数传递数组 指针数组 数组 数组是具有相同数据类型的一组已编号且长度固定的数据项序列, ...
最新文章
- 算法基础知识科普:8大搜索算法之二叉搜索树(上)
- 微服务架构实战项目Serverless的持续交付与架构案例
- 【Android View事件分发机制】滑动冲突
- VS2008 + Silverlight初步学习
- 华为首款搭载鸿蒙os 荣耀智慧屏,全球首款搭载鸿蒙OS终端! 荣耀智慧屏将在今天拉开面纱...
- java 图片批量上传_java实现批量上传图片,还要保证每个图片的顺序号,疑问求教!...
- 联合使用 HTML 5、地理定位 API
- 前端项目,将package.json数据放到项目某处使用
- Caffe100数据集使用
- xulrunner弹出窗口不显示解决方法
- c语言数据页,c语言基础--数据类型(51页)-原创力文档
- 小程序之跨平台黑魔法
- 跟我一起玩转A870省电内核、超频内核
- 基于EEG信号的文献记录01(0719)-特征选择和分类算法在基于脑电信号的睡眠阶段分类中的比较研究
- 抖音的计算机技术优势,抖音成功的优势在哪里?
- swift野梦抄袭 taylor_如何看待蔡健雅新歌《半途》被指抄袭 Taylor Swift 的《Safe Sound》?...
- 【饭谈】谈谈所有人都曾经对测开技术的迷茫和恐惧
- 利用千人基因组数据库查看SNP在不同地区、国家、洲的频率及个数
- css and HTMLpicture knowledge
- 设计模式-备忘录模式(快照模式)
热门文章
- 分享Kali Linux 2016.2第47周虚拟机
- android ffmpeg 简书,偶遇FFmpeg(三)——Android集成
- excel字段自动java类,Java 接口自动化系列--工具类之Excel测试数据解析封装
- 计算机类和鼠标类是什么关系,常见鼠标的种类
- java string逆序_Java学习笔记(八)——异常
- mysql去除输入的字符串中的中文_Sql得到(去除)字符串中所有汉字,字母,数字的函数...
- 脑电分析系列[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型
- Htc Vive VR 手势识别插件教程 1.1 版本(附1.0版本教程PDF)
- 蜘蛛仅靠电场就能起飞,连风都不需要,网友:懂了,蜘蛛会用原力
- 外国小哥恶搞:用ESP32单片机伪装成GPU,让朋友电脑中“勒索病毒