• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
demon_gdy
博客园    首页    新随笔    联系   管理     
Go语言结构体(struct)
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  🔞 
------------------------------------

 

posted on 2017-07-30 14:38  demon_gdy  阅读(416)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3