Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
定义结构体及访问其成员
.结构体.成员名"
package main
import "fmt"
// 声明一个结构体 Books 结构体名称
type Books struct {
title string
author string
subject string
book_id int
}
func main() {
// 初始化一个新的结构体
fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407})
// 也可以使用 key => value 格式
fmt.Println(Books{title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程", book_id: 6495407})
// 忽略的字段为 0 或 空
fmt.Println(Books{title: "Go 语言", author: "www.runoob.com"})
// 也可以这样初始化指定字段
// 通过.可以访问其成员
var BooksT Books
BooksT.title = "这是一个书名"
}
结构体作为函数参数
结构体可以和其他类型一样作为函数参数传递
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func main() {
var Book1 Books /* 声明 Book1 为 Books 类型 */
var Book2 Books /* 声明 Book2 为 Books 类型 */
/* book 1 描述 */
Book1.title = "Go 语言"
Book1.author = "www.runoob.com"
Book1.subject = "Go 语言教程"
Book1.book_id = 6495407
/* book 2 描述 */
Book2.title = "Python 教程"
Book2.author = "www.runoob.com"
Book2.subject = "Python 语言教程"
Book2.book_id = 6495700
/* 打印 Book1 信息 */
printBook(Book1)
/* 打印 Book2 信息 */
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 : Go 语言
Book author : www.runoob.com
Book subject : Go 语言教程
Book book_id : 6495407
Book title : Python 教程
Book author : www.runoob.com
Book subject : Python 语言教程
Book book_id : 6495700
结构体指针
var struct_pointer *Books
struct_pointer = &Book1
.结构体.成员名"
type node struct {
value int
left *node
right *node
}
var root node
root = node{value:1}
//root := node{value:1}
root.left = &node{value:2}
root.left.right = &node{value:3}
root.right = new(node)
结构体匿名字段
type Person struct {
name string
sex byte
age int
}
type Student struct {
Person //只有类型,没有名字,匿名字段,继承了Person的成员
id int
}
func main() {
var s1 Student = Student{
Person: Person{},
id: 0,
}
fmt.Print(s1)
//自动推导类型
s2 := Student{
Person: Person{},
id: 0,
}
fmt.Println(s2)
}