Go 語言 結構體
引言
Go 語言中陣列可以儲存同一型別的資料,但在結構體中我們可以為不同項定義不同的資料型別
結構體是由一系列具有相同型別或不同型別的資料構成的資料集合
結構體表示一項記錄,比如儲存圖書館的書籍記錄,每本書有以下屬性:
Title :標題 Author : 作者 Subject:學科 ID:書籍ID
一、定義結構體
二、訪問結構體成員
三、結構體作為函式引數
四、結構體指標
一、定義結構體
1. 語法格式
- 結構體定義需要使用
type
和struct
語句 - struct 語句定義一個新的資料型別,結構體中有一個或多個成員
- type 語句設定了結構體的名稱
結構體的格式如下
type struct_variable_type struct { member definition member definition ... member definition }
一旦定義了結構體型別,它就能用於變數的宣告,語法格式如下
variable_name := structure_variable_type {value1, value2...valuen} 或 variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
2. 示例
package main import "fmt" type Persion struct { name string sex string age int id_card int } func main() { //建立一個新的結構體 fmt.Println(Persion{"zhangsan", "男", 20, 123412424}) //使用key:value格式 fmt.Println(Persion{name: "lisi", sex: "女", age: 18, id_card: 133654623}) //忽略的欄位為0或空 fmt.Println(Persion{name: "wangwu", id_card: 21352365}) } //輸出結果 {zhangsan 男 20 123412424} {lisi 女 18 133654623} {wangwu 0 21352365}
二、訪問結構體成員
- 如果要訪問結構體成員,需要使用點號
.
操作符,格式為:
結構體.成員名"
- 結構體型別變數使用 struct 關鍵字定義,例項如下:
package main import "fmt" func main() { //結構體宣告 type Persion struct { name string age int sex string id int } //結構體型別的變數 var ( Persion1 Persion //宣告 Persion1 為 Persion 型別 Persion2 Persion //宣告 Persion2 為 Persion 型別 ) //給prison1賦值 Persion1.name = "lisi" Persion1.sex = "man" Persion1.age = 30 Persion1.id = 56341153 //給prison2賦值 Persion2.name = "wangwu" Persion2.sex = "woman" Persion2.age = 18 Persion2.id = 78238232 fmt.Println(Persion1) fmt.Println(Persion2) } //輸出結果如下 {lisi 30 man 56341153} {wangwu 18 woman 78238232}
三、結構體作為函式引數
結構體也可以作為引數傳遞給函式,可以解決一些程式碼的冗餘問題,簡化程式碼
- 示例
package main import "fmt" //結構體宣告 type Persion struct { name string age int sex string id int } func main() { //結構體型別的變數 var ( Persion1 Persion //宣告 Persion1 為 Persion 型別 Persion2 Persion //宣告 Persion2 為 Persion 型別 ) //給prison1賦值 Persion1.name = "lisi" Persion1.sex = "man" Persion1.age = 30 Persion1.id = 56341153 //給prison2賦值 Persion2.name = "wangwu" Persion2.sex = "woman" Persion2.age = 18 Persion2.id = 78238232 //使用函式傳遞結構體 printInfo(Persion1) fmt.Println("------------------") printInfo(Persion2) } //函式定義結構體為形式引數,進行傳入 func printInfo(p Persion) { fmt.Println("姓名: ", p.name) fmt.Println("年齡: ", p.age) fmt.Println("性別: ", p.sex) fmt.Println("身份證: ", p.id) } //輸出結果如下 姓名: lisi 年齡: 30 性別: man 身份證: 56341153 ------------------ 姓名: wangwu 年齡: 18 性別: woman 身份證: 78238232
四、結構體指標
可以定義指向結構體的指標類似於其他指標變數,格式如下
var struct_pointer *Persion
以上定的指標變數可以儲存結構體變數的地址,檢視結構體變數的地址,可以將&符合放置於結構體變數前
struct_pointer = &Persion1
使用結構體指標訪問結構體成員,可以使用.操作符
struct_pointer.title
package main import "fmt" //結構體宣告 type Persion struct { name string age int sex string id int } func main() { //結構體型別的變數 var ( Persion1 Persion //宣告 Persion1 為 Persion 型別 Persion2 Persion //宣告 Persion2 為 Persion 型別 ) //給prison1賦值 Persion1.name = "lisi" Persion1.sex = "man" Persion1.age = 30 Persion1.id = 56341153 //給prison2賦值 Persion2.name = "wangwu" Persion2.sex = "woman" Persion2.age = 18 Persion2.id = 78238232 //使用函式傳遞結構體的地址 printInfo(&Persion1) fmt.Println("------------------") printInfo(&Persion2) } //定義結構體指標形參進行傳入 func printInfo(p *Persion) { fmt.Println("姓名: ", p.name) fmt.Println("年齡: ", p.age) fmt.Println("性別: ", p.sex) fmt.Println("身份證: ", p.id) } //輸出結果如下 姓名: lisi 年齡: 30 性別: man 身份證: 56341153 ------------------ 姓名: wangwu 年齡: 18 性別: woman 身份證: 78238232
總結
結構體是由相同型別和不同型別組成的資料集合,儲存的結構型別是不受限制的