Go語言結構體(struct)
阿新 • • 發佈:2017-07-30
手機 div -s 東京 log fmt lis int 不同類
Go 語言結構體
Go 語言中數組可以存儲同一類型的數據,但在結構體中我們可以為不同項定義不同的數據類型。
結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。
結構體表示一項記錄,比如保存圖書館的書籍記錄,每本書有以下屬性:
- title :書名
- author :作者
- address :地址
- mobile :手機號
- 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)