首頁 > 軟體

Go語言學習之指標的用法詳解

2022-04-21 19:00:26

引言

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

總結

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

以上就是Go語言學習之指標的用法詳解的詳細內容,更多關於Go語言指標的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com