Go 語言 結構體

隱姓埋名4869發表於2022-03-30

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

  

 

總結

結構體是由相同型別和不同型別組成的資料集合,儲存的結構型別是不受限制的



 

相關文章