Go語言學習之結構體

2022-07-23 06:00:13 字數 3035 閱讀 5784

介紹:

go語言中的基礎資料型別可以表示一些事務的基本屬性,但是我們想表達乙個事務的全部或部分屬性時(比如乙個人,她的姓名、年齡、愛好等屬性),就無法滿足需求了,go語言為我們提供了一種自定義資料型別,可以封裝多個基本資料型別,叫結構體,也就是struct

結構體相當於python裡給類傳的引數,python寫法:self.name = name,self.age=age.

一、結構體定義

使用type和struct來定義結構體

type 結構體名稱 struct

其中

1

.結構體名稱: 就是自定義結構體的名稱

2.欄位名: 表示結構體的欄位名,結構體欄位必須唯一

3.欄位型別: 表示結構體的字段型別,例如 string int等

舉個例子,我們定義乙個名稱為 person的結構體

type person struct

同樣的字段型別 還可以寫在一行裡

type person struct

這樣我們就擁有person的自定義型別,它有name,city,age三個字段,分別表示姓名、城市、年齡,這樣我們使用person這個結構體就能很方便的在程式中儲存人的資訊了

二、結構體例項化

//

定義結構體

type person struct

func main()

結果:

三、匿名結構體在定義一些臨時資料結構等場景下還可以使用匿名結構體

func main()

//例項化匿名結構體

user.name = "李四"

user.age = 18

fmt.println(user)

}結果 :

四、對結構體指標 進行例項化可以取結構體的指標位址進行例項化,那麼p1就是乙個 帶指標位址的變數

type person struct

func main() //

取person的記憶體位址進行例項化

p1.name = "王五"

//跟平常的例項化沒有區別,很方便

p1.city = "上海"

p1.age = 19

fmt.println(p1)

fmt.printf(

"型別為: %t

",p1) //

列印p1的型別

}----------------------------結果----------------------------

結果:&

型別為: *main.person //

代表p1是乙個帶指標位址的變數

五、使用值得列表進行例項化例項化結構體得時候可以簡寫,也就是說例項化得時候可以不寫key,只寫value

type person struct

func main()

fmt.println(p1)

fmt.printf(

"型別為: %t

",p1)

}結果:

--------------------------------結果------------------------

&型別為: *main.person

這麼例項化得時候 需要注意:

1.必須例項化結構體得所有字段

2.例項化得順序必須跟結構體定義得順序一樣

3.該方式不能和平常得 key/value例項化 混用

六、先定義乙個結構體, 然後在函式裡 例項化 這個結構體,並返回指標型別的結構體(有的文章稱之為 建構函式)

//

定義乙個結構體

type person struct

//在函式裡例項化這個結構體,*person代表返回值必須時指標型別,所以必須return &person取出結構體的指標位址進行返回

func newperson(name, city string, age int8) *person

}func main()

---------------------結果---------------------------

&

七、巢狀結構體乙個結構體可以巢狀 另乙個結構體或結構體指標

結果:

}
八、匿名巢狀結構體

type user struct

//位址結構體

type address struct

func main()

結果:

}
九、結構體標籤(tag)tag是結構體的元資訊,可以在執行的時候通過反射的機制讀取出來

例如我們為student結構體的每個字段定義json序列化時使用的tag

type student struct

func main()

data, err :=json.marshal(s1)

if err !=nil

fmt.printf(

"json str:%s\n

", data)

}-------------------結果-----------------------------------json str:

//id就是結構體裡id的tag,xingbie是結構體裡gender的tag,所以作用就是 結構體被序列化之後,key的別名

go語言學習筆記 結構體

go語言中,結構體的宣告非常類似c語言,具體定義方法如下 初始化方法有三種 package main import fmt 定義乙個結構體型別 type student struct func main fmt.println s1 s1 2.部分成員初始化,未初始化的變數被賦值為0 s2 stud...

go語言學習12(結構體)

格式 type 結構體名稱 struct 結構體如果需要匯出到其他包用,則名字首字母需要大寫 結構體中成員如果需要在其他包中引用,也需要首字母大寫。例如 type teststruct struct 上面結構體名 teststruct 可以被其他包引用 同理其成員 fieldout 也可以被其他包引...

Go語言學習(十)Go 語言結構體 Go 併發

go 語言中陣列可以儲存同一型別的資料,但在結構體中我們可以為不同項定義不同的資料型別。結構體是由一系列具有相同型別或不同型別的資料構成的資料集合。1.定義結構體 例項如下 一直出現該報錯的 原因是因為其中語句用的是單引號 2.訪問結構體成員 結構體型別變數使用 struct 關鍵字定義,例項如下 ...