Go语言结构体(struct)

Go 语言结构体

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

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

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

  1. title         :书名
  2. author     :作者
  3. address       :地址
  4. mobile         :手机号
  5. publisher     :出版社

定义结构体

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

type struct_name struct{
     struct_field_name  type
     ..........
}    

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

两种声明的方法:

variable_name := struct_name{sturct_field_name:value,.....} 

variable_name := struct_name{}
variable_name.struct_filed_name = value
.......

访问结构体成员

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

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

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 //结构体
 8 type Books struct {
 9     //结构体中的字段及字段对应的数据类型
10     title         string
11     author          string
12     address     string
13     mobile        int8
14     publisher    string
15
16 }
17
18 func main(){
19     //实例化结构体并赋值,用的第一种方法
20     book1 := Books{title:"小陈的幸福生活~",author:"小陈",address:"东京有点热",mobile:110,publisher:"日本??"}
21     //实例化结构体并赋值,分别给每个字段赋值
22     book2 := Books{}
23     book2.title = "小兔子要搞事情"
24     book2.author = "帅兔子~"
25     book2.address = "中国~日本省"
26     book2.mobile = 110
27     book2.publisher = "??"
28
29     //打印赋值以后的信息
30     fmt.Printf("book title      %s \n", book1.title)
31     fmt.Printf("book author     %s \n", book1.author)
32     fmt.Printf("book address    %s \n", book1.address)
33     fmt.Printf("book mobile     %d \n", book1.mobile)
34     fmt.Printf("book publisher  %s \n", book1.publisher)
35
36     fmt.Println("-----------------------------------")
37
38     fmt.Printf("book title      %s \n", book2.title)
39     fmt.Printf("book author     %s \n", book2.author)
40     fmt.Printf("book address    %s \n", book2.address)
41     fmt.Printf("book mobile     %d \n", book2.mobile)
42     fmt.Printf("book publisher  %s \n", book2.publisher)
43 }

以上代码运行执行结果:

book title      小陈的幸福生活~
book author     小陈
book address    东京有点热
book mobile     110
book publisher  日本??
-----------------------------------
book title      小兔子要搞事情
book author     帅兔子~
book address    中国~日本省
book mobile     110
book publisher  ?? 

结构体作为函数参数

你可以向其他数据类型一样将结构体类型作为参数传递给函数。并以以上实例的方式访问结构体变量:

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 //结构体
 8 type Books struct {
 9     //结构体中的字段及字段对应的数据类型
10     title         string
11     author          string
12     address     string
13     mobile        int8
14     publisher    string
15
16 }
17
18 //用于打印结构体的自定义函数
19 func printBook(book Books){
20     fmt.Printf("book title      %s \n", book.title)
21     fmt.Printf("book author     %s \n", book.author)
22     fmt.Printf("book address    %s \n", book.address)
23     fmt.Printf("book mobile     %d \n", book.mobile)
24     fmt.Printf("book publisher  %s \n", book.publisher)
25     fmt.Println("------------------------------------")
26
27 }
28
29 func main(){
30     //实例化结构体并赋值,用的第一种方法
31     book1 := Books{title:"小陈的幸福生活~",author:"小陈",address:"东京有点热",mobile:110,publisher:"日本??"}
32     //实例化结构体并赋值,分别给每个字段赋值
33     book2 := Books{}
34     book2.title = "小兔子要搞事情"
35     book2.author = "帅兔子~"
36     book2.address = "中国~日本省"
37     book2.mobile = 110
38     book2.publisher = "??"
39
40     //打印赋值以后的信息
41     printBook(book1)
42     printBook(book2)
43 }

以上代码运行执行结果:

book title      小陈的幸福生活~
book author     小陈
book address    东京有点热
book mobile     110
book publisher  日本??
------------------------------------
book title      小兔子要搞事情
book author     帅兔子~
book address    中国~日本省
book mobile     110
book publisher  ??
------------------------------------

结构体指针

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

var struct_pointer *Books

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

struct_pointer = &book;

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

struct_pointer.title;

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

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 //结构体
 8 type Books struct {
 9     //结构体中的字段及字段对应的数据类型
10     title         string
11     author          string
12     address     string
13     mobile        int64
14     publisher    string
15
16 }
17
18 //用于打印结构体的自定义函数
19 func printBook(book *Books){
20     fmt.Printf("book title      %s \n", book.title)
21     fmt.Printf("book author     %s \n", book.author)
22     fmt.Printf("book address    %s \n", book.address)
23     fmt.Printf("book mobile     %d \n", book.mobile)
24     fmt.Printf("book publisher  %s \n", book.publisher)
25     fmt.Println("------------------------------------")
26
27 }
28
29 func main(){
30     //实例化结构体并赋值,分别给每个字段赋值
31     book := Books{}
32     book.title = "Golang大战Python"
33     book.author = "来自火星的大佬~"
34     book.address = "可能是来自火星的吧~"
35     book.mobile = 13843811011
36     book.publisher = "??"
37
38     //打印赋值以后的信息
39     printBook(&book)
40 }

以上代码运行执行结果:

book title      olang大战Python
book author     来自火星的大佬~
book address    可能是来自火星的吧~
book mobile     13843811011
book publisher  ??
------------------------------------
时间: 2024-07-31 14:34:49

Go语言结构体(struct)的相关文章

C语言 - 结构体(struct)的位字段(:) 详解

结构体(struct)的位字段(:) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struct)可以使用位字段(:), 节省空间, 如以下代码, 结构体a中的, 第一个变量x占用1个字符, y占用2个字符, z占用33个字符(越界); 但是sizeof()会自动补齐, 如x+y一共占用4个字节, z占用8个字节, 所以结构体占用12个字节; 当使用加法运算时, 会初始化为0; 代码: /* *

漫谈C语言结构体struct、公用体union空间占用

先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; union union_data1{ short a;//本身占用2个字节 char b[13];//本身占用13个字节 int c ;//本身占用4个字节 }; struct struct_data{ int a ;//int本身占用4个字节,偏移量为0 char b ;//char本身占用1个字节,偏移量为

C语言结构体-struct

知识点: 1)结构体的定义. 2)结构体的sizeof. 3)  结构体的指针. 1) 结构体的定义: 在逻辑上有一定关联的多个数据类型做为一整体进行操作的数据结构,它的关键字是struct.下面我将定义一个结构体 struct Student{ char *name; int age; int sid; }; 我用上面定义的结构体Student来定义一个变量. struct Student student; 上面的代码有点烦,其实我可以这样写 struct Student{ char *nam

C语言 - 结构体(struct)比特字段(:) 详细解释

结构体(struct)比特字段(:) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struct)能够使用位字段(:), 节省空间, 例如以下面代码, 结构体a中的, 第一个变量x占用1个字符, y占用2个字符, z占用33个字符(越界); 可是sizeof()会自己主动补齐, 如x+y一共占用4个字节, z占用8个字节, 所以结构体占用12个字节; 当使用加法运算时, 会初始化为0; 代码

c 语言结构体struct的三种定义方式 及 typedef

struct 结构体名{ 成员列表: ..... }结构体变量: 结构体类型变量的定义 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下: 1) 先定义结构体类型,再定义结构体类型变量:struct stu / *定义学生结构体类型* /{     char name[20]; / * 学生姓名* /     char sex; / * 性别* /     long num; /

C语言结构体(struct)常见使用方法(转)

本文转自 CSDN huqinweI987 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 [cpp] view plaincopy struct stuff{ char job[20]; int age; float height; }; 第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义 [cpp] view plaincopy

C语言结构体(struct)常见使用方法

基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 [cpp] view plain copy struct stuff{ char job[20]; int age; float height; }; 第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义 [cpp] view plain copy //直接带变量名Huqinwei st

strcut的用法--------C语言结构体(struct)常见使用方法(转载)

今天复习一下struct,顺便挖掘一下以前没注意的小细节: 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 [cpp] view plain copy struct stuff{ char job[20]; int age; float height; }; 第二种:附加该结构体类型的"结构体变量"的初始化的结构体定义 [cpp] 

go语言之行--结构体(struct)详解、链表

一.struct简介 go语言中没有像类的概念,但是可以通过结构体struct实现oop(面向对象编程).struct的成员(也叫属性或字段)可以是任何类型,如普通类型.复合类型.函数.map.interface.struct等,所以我们可以理解为go语言中的“类”. 二.struct详解 struct定义 在定义struct成员时候区分大小写,若首字母大写则该成员为公有成员(对外可见),否则是私有成员(对外不可见). type struct_variable_type struct { mem