Go 语言结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:

  • Title :标题
  • Author : 作者
  • Subject:学科
  • ID:书籍ID

定义结构体

结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体有中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:

  1. type struct_variable_type struct {
  2. member definition;
  3. member definition;
  4. ...
  5. member definition;
  6. }
  1. //一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:
  2.  
  3. variable_name := structure_variable_type {value1, value2...valuen}

  4. variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Books struct {
  6. title string
  7. author string
  8. subject string
  9. book_id int
  10. }
  11.  
  12. func main() {
  13.  
  14. // 创建一个新的结构体
  15. fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407})
  16.  
  17. // 也可以使用 key => value 格式
  18. fmt.Println(Books{title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程", book_id: 6495407})
  19.  
  20. // 忽略的字段为 0 或 空
  21. fmt.Println(Books{title: "Go 语言", author: "www.runoob.com"})
  22. }
  23. //输出结果为:
  24.  
  25. {Go 语言 www.runoob.com Go 语言教程 6495407}
  26. {Go 语言 www.runoob.com Go 语言教程 6495407}
  27. {Go 语言 www.runoob.com 0}

访问结构体成员

如果要访问结构体成员,需要使用点号 . 操作符,格式为:

  1. 结构体.成员名"

结构体类型变量使用 struct 关键字定义,实例如下:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Books struct {
  6. title string
  7. author string
  8. subject string
  9. book_id int
  10. }
  11.  
  12. func main() {
  13. var Book1 Books /* 声明 Book1 为 Books 类型 */
  14. var Book2 Books /* 声明 Book2 为 Books 类型 */
  15.  
  16. /* book 1 描述 */
  17. Book1.title = "Go 语言"
  18. Book1.author = "www.runoob.com"
  19. Book1.subject = "Go 语言教程"
  20. Book1.book_id = 6495407
  21.  
  22. /* book 2 描述 */
  23. Book2.title = "Python 教程"
  24. Book2.author = "www.runoob.com"
  25. Book2.subject = "Python 语言教程"
  26. Book2.book_id = 6495700
  27.  
  28. /* 打印 Book1 信息 */
  29. fmt.Printf( "Book 1 title : %s\n", Book1.title)
  30. fmt.Printf( "Book 1 author : %s\n", Book1.author)
  31. fmt.Printf( "Book 1 subject : %s\n", Book1.subject)
  32. fmt.Printf( "Book 1 book_id : %d\n", Book1.book_id)
  33.  
  34. /* 打印 Book2 信息 */
  35. fmt.Printf( "Book 2 title : %s\n", Book2.title)
  36. fmt.Printf( "Book 2 author : %s\n", Book2.author)
  37. fmt.Printf( "Book 2 subject : %s\n", Book2.subject)
  38. fmt.Printf( "Book 2 book_id : %d\n", Book2.book_id)
  39. }
  40. 以上实例执行运行结果为:
  41.  
  42. Book 1 title : Go 语言
  43. Book 1 author : www.runoob.com
  44. Book 1 subject : Go 语言教程
  45. Book 1 book_id : 6495407
  46. Book 2 title : Python 教程
  47. Book 2 author : www.runoob.com
  48. Book 2 subject : Python 语言教程
  49. Book 2 book_id : 6495700
  50. 结构体作为函数参数
  51. 你可以像其他数据类型一样将结构体类型作为参数传递给函数。并以以上实例的方式访问结构体变量:
  52.  
  53. package main
  54.  
  55. import "fmt"
  56.  
  57. type Books struct {
  58. title string
  59. author string
  60. subject string
  61. book_id int
  62. }
  63.  
  64. func main() {
  65. var Book1 Books /* 声明 Book1 为 Books 类型 */
  66. var Book2 Books /* 声明 Book2 为 Books 类型 */
  67.  
  68. /* book 1 描述 */
  69. Book1.title = "Go 语言"
  70. Book1.author = "www.runoob.com"
  71. Book1.subject = "Go 语言教程"
  72. Book1.book_id = 6495407
  73.  
  74. /* book 2 描述 */
  75. Book2.title = "Python 教程"
  76. Book2.author = "www.runoob.com"
  77. Book2.subject = "Python 语言教程"
  78. Book2.book_id = 6495700
  79.  
  80. /* 打印 Book1 信息 */
  81. printBook(Book1)
  82.  
  83. /* 打印 Book2 信息 */
  84. printBook(Book2)
  85. }
  86.  
  87. func printBook( book Books ) {
  88. fmt.Printf( "Book title : %s\n", book.title);
  89. fmt.Printf( "Book author : %s\n", book.author);
  90. fmt.Printf( "Book subject : %s\n", book.subject);
  91. fmt.Printf( "Book book_id : %d\n", book.book_id);
  92. }
  93. //以上实例执行运行结果为:
  94.  
  95. Book title : Go 语言
  96. Book author : www.runoob.com
  97. Book subject : Go 语言教程
  98. Book book_id : 6495407
  99. Book title : Python 教程
  100. Book author : www.runoob.com
  101. Book subject : Python 语言教程
  102. Book book_id : 6495700

结构体指针

你可以定义指向结构体的指针类似于其他指针变量,格式如下:

  1. var struct_pointer *Books

以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:

  1. struct_pointer = &Book1;

使用结构体指针访问结构体成员,使用 "." 操作符:

  1. struct_pointer.title;

接下来让我们使用结构体指针重写以上实例,代码如下:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Books struct {
  6. title string
  7. author string
  8. subject string
  9. book_id int
  10. }
  11.  
  12. func main() {
  13. var Book1 Books /* Declare Book1 of type Book */
  14. var Book2 Books /* Declare Book2 of type Book */
  15.  
  16. /* book 1 描述 */
  17. Book1.title = "Go 语言"
  18. Book1.author = "www.runoob.com"
  19. Book1.subject = "Go 语言教程"
  20. Book1.book_id = 6495407
  21.  
  22. /* book 2 描述 */
  23. Book2.title = "Python 教程"
  24. Book2.author = "www.runoob.com"
  25. Book2.subject = "Python 语言教程"
  26. Book2.book_id = 6495700
  27. /* 打印 Book1 信息 */
  28. printBook(&Book1)
  29.  
  30. /* 打印 Book2 信息 */
  31. printBook(&Book2)
  32. }
  33. func printBook( book *Books ) {
  34. fmt.Printf( "Book title : %s\n", book.title);
  35. fmt.Printf( "Book author : %s\n", book.author);
  36. fmt.Printf( "Book subject : %s\n", book.subject);
  37. fmt.Printf( "Book book_id : %d\n", book.book_id);
  38. }
  39. 以上实例执行运行结果为:
  40.  
  41. Book title : Go 语言
  42. Book author : www.runoob.com
  43. Book subject : Go 语言教程
  44. Book book_id : 6495407
  45. Book title : Python 教程
  46. Book author : www.runoob.com
  47. Book subject : Python 语言教程
  48. Book book_id : 6495700

  

GO语言学习(十六)Go 语言结构体的更多相关文章

  1. C语言学习总结(1)——结构体

      一,什么是结构体    我们知道数组(Array),它是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄 ...

  2. Go语言学习笔记(四)结构体struct & 接口Interface & 反射

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  3. Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  4. c语言学习笔记(10)——结构体

    ------------------------------------------------------------------ # include <stdio.h> struct ...

  5. Go语言学习笔记(8)——包和结构体

    包 —— 每个可执行的应用程序必须包含一个主函数,它是执行的入口点.主函数应该存在main包中. 结构体: 通过 . 操作符访问结构体的各个成员! 1. 定义结构体类型person: type per ...

  6. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

  7. go语言通过反射获取和设置结构体字段值的方法

    本文实例讲述了go语言通过反射获取和设置结构体字段值的方法.分享给大家供大家参考.具体实现方法如下: type MyStruct struct { N int } n := MyStruct{ 1 } ...

  8. Go第六篇之结构体剖析

    Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类型可以被实例化,使用new或&a ...

  9. c语言学习之基础知识点介绍(十二):结构体的介绍

    一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...

  10. c语言第六次作业---结构体&文件

    1.本章学习总结 1.1思维导图 1.2学习体会 这次应该是本学期最后一次博客了,总结一下这个学期的学习,一开始就基础薄弱还一直畏难一直懒惰,不想去解决问题导致后面问题越来越多就觉得学习越来越难,后面 ...

随机推荐

  1. UVA And Then There Was One

    约瑟夫环问题,只不过每次删除一个后,在移m的倍数. #include <iostream> #include <cstdio> #include <cstring> ...

  2. 【Henu ACM Round#17 C】Kitahara Haruki's Gift

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 判断sum/2这个价值能不能得到就可以了. 则就是一个01背包模型了. 判断某个价值能否得到. f[j]表示价值j能否得到. f[0 ...

  3. Webhook

    Webhook就是用户通过自定义回调函数的方式来改变Web应用的一种行为,这些回调函数可以由不是该Web应用官方的第三方用户或者开发人员来维护,修改.通过Webhook,你可以自定义一些行为通知到指定 ...

  4. Cocos2d-x手机游戏开发与项目实践具体解释_随书代码

    Cocos2d-x手机游戏开发与项目实战具体解释_随书代码 作者:沈大海  因为原作者共享的资源为UTF-8字符编码.下载后解压在win下显示乱码或还出现文件不全问题,现完整整理,解决全部乱码问题,供 ...

  5. Spring : 征服数据库(一)

    严格的说.这里征服的是关系型数据库.之后笔者会以MongoDB为例,给出非关系型数据库的解决方式,敬请期待. 获取连接,操作,关闭,不知所云的异常...是的,你受够了.在使用纯JDBC时你訪问数据库时 ...

  6. hdu1234 开门人和关门人 (等价转换)

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  7. Onvif开发之代码框架生成篇

    看了前一篇的ONVIF的简单介绍应该对它的基本使用都有了一些基本的了解了吧!下面我讲一步分解向大家介绍下如何通过gsoap生成需要的代码,以及代码中需要注意的问题[基于Linux平台 C开发] 生成O ...

  8. 3.常用Bracket插件

    转自:https://blog.csdn.net/iso_wsy/article/details/52608205 1.Emmet 如果你从事Web前端开发的话,对该插件一定不会陌生.它可以加快你的 ...

  9. 76.QT槽的机制

    按钮点击获取文本框输入 void Dialog::on_pushButton_clicked() { //获取文本输入 QString vstr = ui->lineEdit->text( ...

  10. LuoguP4012 深海机器人问题(费用流)

    题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...