结构体
1、定义结构体
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。
代码示例
package main
import "fmt"
//定义结构体
type Books struct {
title string
author string
subject string
bookId int
}
func main() {
// 创建一个新的结构体
fmt.Println(Books{"Go 语言", "mr.white", "Go语言教程", 100001})
// 也可以使用 key => value 格式
fmt.Println(Books{title: "Go 语言", author: "mr.white", subject: "Go语言教程", bookId: 100002})
// 忽略的字段为 0 或 空
fmt.Println(Books{title: "Go 语言", author: "mr.white"})
}
查看运行结果
2、访问结构体成员
如果要访问结构体成员,需要使用点号 . 操作符。
package main
import "fmt"
//定义结构体
type Books struct {
title string
author string
subject string
bookId int
}
func main() {
Book1 := Books
/* book 1 描述 */
Book1.title = "Go 语言"
Book1.author = "mr.white"
Book1.subject = "Go 语言教程"
Book1.bookId = 100001
Book2 := Books
/* book 2 描述 */
Book2.title = "Python 教程"
Book2.author = "mr.white"
Book2.subject = "Python 语言教程"
Book2.bookId = 100002
/* 打印 Book1 信息 */
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.bookId)
/* 打印 Book2 信息 */
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.bookId)
}
查看运行结果
3、结构体作为函数
实例代码
package main
import "fmt"
//定义一个类型
type tsh struct {
//定义成员,类型是func() string
test func() string
}
func main() {
t := tsh{
test: func() string {
return "123"
},
}
fmt.Println(t.test())
}
查看运行结果
4、结构体指针
代码示例
package main
import "fmt"
func main() {
type Person struct {
id int
name string
}
var tom = Person{1, "tom"}
var p_person *Person
p_person = &tom
fmt.Printf("tom: %v\n", tom)
fmt.Printf("p_person: %p\n", p_person)
fmt.Printf("*p_person: %v\n", *p_person)
}
查看运行结果