溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Go語言中結(jié)構(gòu)體的作用是什么

發(fā)布時間:2021-07-06 16:00:32 來源:億速云 閱讀:184 作者:Leah 欄目:編程語言

這篇文章給大家介紹Go語言中結(jié)構(gòu)體的作用是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

自定義類型

type 自定義類型名 類型名 例: type NewInt int

完整代碼

package main  import "fmt"  type NewInt int  func main() {     var n1 NewInt = 1     fmt.Println(n1)//結(jié)果為1 }

如果要是理解的話,可以理解為NewInt包含了int的功能。

這里可以把NewInt當(dāng)作int來使用。

注:NewInt是一個新的類型,它包含int,并不等于int。

類型別名

代碼

type 類型別名 = 類型名 例: type Nint = int

完整代碼

package main  import "fmt"  type Nint = int  func main() {     var n1 Nint = 1     fmt.Println(n1)//1 }

自定義類型和類型別名區(qū)別

可能猛一看,感覺自定義類型和類型別名似乎一樣,但是其實是不太一樣的。

代碼

package main  import "fmt"  type Nint1 int   //自定義類型 type Nint2 = int //類型別名  func main() {     var n1 Nint1 = 1     var n2 Nint2 = 1     fmt.Printf("n1類型:%T,n2類型:%T", n1, n2) }

執(zhí)行結(jié)果。

Go語言中結(jié)構(gòu)體的作用是什么

結(jié)論:自定義類型真的是自定義類型,類型都變了,類型別名只是類型名變了,但是本質(zhì)沒變。

結(jié)構(gòu)體

Go語言的結(jié)構(gòu)體,相當(dāng)Java,Python等語言中的類,已經(jīng)不再是簡簡單單的結(jié)構(gòu)體那么簡單了。

結(jié)構(gòu)體屬于基本數(shù)據(jù)類型。

內(nèi)存圖大概如下。

Go語言中結(jié)構(gòu)體的作用是什么

結(jié)構(gòu)體定義

定義結(jié)構(gòu)體需要用到關(guān)鍵字type和struct。

語法

type 結(jié)構(gòu)體名 struct {     字段1 字段類型1     字段2 字段類型2     ... }

示例,通過結(jié)構(gòu)體描述一個學(xué)生。

type Student struct {     Name   string     Age    int     Height int     Weight int     phone string }

注:如果字段類型是相同的,可以寫在同一行。

type Student struct {   Name                string   Age, Height, Weight int   phone               string }

結(jié)構(gòu)體初始化

方式一,賦值時初始化

func main() {   var s1 = Student{     Name:   "張三",     Age:    18,     Height: 180,     Weight: 120,     phone:  "6666666",   }   fmt.Println(s1) }

方式二,先聲明,后賦值

func main() {   var s1 Student   s1.Name = "張三"   s1.Age = 18   s1.Height = 180   s1.Weight = 120   s1.phone = "66666" }

兩個執(zhí)行結(jié)果。

Go語言中結(jié)構(gòu)體的作用是什么

匿名結(jié)構(gòu)體

有時候我們的函數(shù)可能會要求傳入一個結(jié)構(gòu)體,但是你又不想定義,就想臨時用一下,趕緊傳參得了。

這時候可以考慮匿名結(jié)構(gòu)體。

方式一,先聲明,后賦值

func main() {   var car struct {     Name   string;     CarNum string   }   car.Name = "QQ"   car.CarNum = "京6666"   fmt.Println(car) //{QQ 京6666} }

方式二,聲明+初始化

func main() {   var car = struct {     Name   string;     CarNum string   }{     Name:   "QQ",     CarNum: "京6666",   }    fmt.Println(car) //{QQ 京6666} }

兩個執(zhí)行結(jié)果。

通過&方式初始化結(jié)構(gòu)體

通過&的方式初始化,性能會提高一點,因為返回的是第一個的指針。

但是操作過程跟上述一樣,Go已經(jīng)封裝好了。

代碼

func main() {   //方式一,等于一個空&結(jié)構(gòu)體在賦值   var s1 = &Student{}   s1.Name = "張三"   //...   //方式二,直接賦值   var s2 = &Student{     Name:   "",     Age:    0,     Height: 0,     Weight: 0,     phone:  "",   }   //方式三不可以   //var s3 &Student//error }

使用&的方式基本跟原來一樣,但是方式三不行。

&初始化結(jié)構(gòu)體函數(shù)注意事項

如果使用&的方式,那函數(shù)參數(shù)也要變一下的。

package main  import "fmt"  type Student struct {   Name                string   Age, Height, Weight int   phone               string }  func sayStudent1(s Student) {   fmt.Println(s) } func sayStudent2(s *Student) {   //如果穿的是結(jié)構(gòu)體地址,那么接收就需要用*   fmt.Println(s) } func main() {   var s1 = Student{     Name:   "111",     Age:    0,     Height: 0,     Weight: 0,     phone:  "1111",   }   var s2 = &Student{     Name:   "2222",     Age:    0,     Height: 0,     Weight: 0,     phone:  "2222",   }   sayStudent1(s1)   sayStudent2(s2) }

執(zhí)行結(jié)果。

Go語言中結(jié)構(gòu)體的作用是什么

關(guān)于結(jié)構(gòu)體默認(rèn)值

代碼

func main() {   var s1 = Student{}   fmt.Println(s1) }

執(zhí)行結(jié)果。

Go語言中結(jié)構(gòu)體的作用是什么

在操作結(jié)構(gòu)體時,即使沒有賦值,也會有默認(rèn)值,所以不用擔(dān)心會報錯。

int默認(rèn)值是0,string默認(rèn)值是"",等。

關(guān)于Go語言中結(jié)構(gòu)體的作用是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI