Go 语言结构体
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性:
- title :书名
- author :作者
- address :地址
- mobile :手机号
- 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-10-16 10:49:58