Go 语言结构体 struct

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)
	
 
}