版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boyun58/article/details/88866354
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
定义结构体
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体有中有一个或多个成员。type 语句设定了结构体的名称。
type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
------------------------------------------------
variable_name := structure_variable_type {value1, value2...valuen}
或
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func main(){
fmt.Println(Books{"程序语言", "ABs", "Go 语言程序教程", 123456})
fmt.Println(Books{title: "程序语言", author: "ABs", subject: "Go 语言程序教程", book_id: 123456})
fmt.Println(Books{title: "Go 语言", author: "ABs"})
}
访问结构体成员
访问结构体成员,需要使用点号 . 操作符
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func main(){
var Book1 Books
var Book2 Books
Book1.title = "程序语言"
Book1.author = "ABs"
Book1.subject = "Go 语言教程"
Book1.book_id = 123456
Book2.title = "程序语言"
Book2.author = "ABs"
Book2.subject = "Py 语言教程"
Book2.book_id = 223456
fmt.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)
fmt.Printf("Book 2 title : %s\n", Book2.title)
fmt.Printf("Book 2 author : %s\n", Book2.author)
fmt.Printf("Book 2 subject : %s\n", Book2.subject)
fmt.Printf("Book 2 book_id : %d\n", Book2.book_id)
}
--------------------------------------------------------------------------------
Book 1 title : 程序语言
Book 1 author : ABs
Book 1 subject : Go 语言教程
Book 1 book_id : 123456
Book 2 title : 程序语言
Book 2 author : ABs
Book 2 subject : Py 语言教程
Book 2 book_id : 223456
结构体作为函数参数
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func main(){
var Book1 Books
var Book2 Books
Book1.title = "程序语言"
Book1.author = "ABs"
Book1.subject = "Go 语言教程"
Book1.book_id = 123456
Book2.title = "程序语言"
Book2.author = "ABs"
Book2.subject = "Py 语言教程"
Book2.book_id = 223456
printBook(Book1)
printBook(Book2)
}
func printBook(Book Books){
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)
}
------------------------------------------------------------------------
Book title : 程序语言
Book author : ABs
Book subject : Go 语言教程
Book book_id : 123456
Book title : 程序语言
Book author : ABs
Book subject : Py 语言教程
Book book_id : 223456
结构体指针
#定义指向结构体的指针类似于其他指针变量
var struct_pointer *Books
#定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前
struct_pointer = &Book1;
#使用结构体指针访问结构体成员,使用 "." 操作符
struct_pointer.title;
例如
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func main(){
var Book1 Books
var Book2 Books
Book1.title = "程序语言"
Book1.author = "ABs"
Book1.subject = "Go 语言教程"
Book1.book_id = 123456
Book2.title = "程序语言"
Book2.author = "ABs"
Book2.subject = "Py 语言教程"
Book2.book_id = 223456
printBook(&Book1)
printBook(&Book2)
}
func printBook(Book *Books){
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)
}
------------------------------------------------------------------
Book title : 程序语言
Book author : ABs
Book subject : Go 语言教程
Book book_id : 123456
Book title : 程序语言
Book author : ABs
Book subject : Py 语言教程
Book book_id : 223456