1. 程式人生 > >Go語言結構體(struct)

Go語言結構體(struct)

手機 div -s 東京 log fmt lis int 不同類

Go 語言結構體

Go 語言中數組可以存儲同一類型的數據,但在結構體中我們可以為不同項定義不同的數據類型。

結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。

結構體表示一項記錄,比如保存圖書館的書籍記錄,每本書有以下屬性:

  1. title   :書名
  2. author   :作者
  3. address :地址
  4. mobile :手機號
  5. 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  ?? 
------------------------------------

Go語言結構體(struct)