Go語言學習四:struct類型

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

struct

我們可以聲明新的類型,作為其它類型的屬性或欄位容器。如,建立一個自訂類型person代表一個人的實體。這個實體擁有屬性:姓名&年齡。這樣的類型我們稱之為struct。
type person struct{        name string        age int}

var P person // P 現在就是 person 類型的變數了P.name = "Astaxie" //  賦值 "Astaxie" 給 P 的 name 屬性 .P.age = 25 //  賦值 "25" 給變數 P 的 age 屬性fmt.Printf("The person's name is %s", P.name) //  訪問 P 的 name 屬性 .

除了上面這種P的聲明使用之外,還有其他兩種聲明使用方式1、按照順序提供初始化值
P := person{"Liuxinming", 28}

2、通過field:value的方式初始化,這樣可以任意順序
P := person{age:28, name:"Liuxinming"}

舉例:
package mainimport "fmt"//聲明一個新的類型type person struct {name stringavg  int}//比較兩個人的年齡,返回年齡大的那個人,並且返回年齡差//struct 也是傳值的func older(p1, p2 person) (person, int) {if p1.avg > p2.avg { //比較p1和p2年齡return p1, p1.avg - p2.avg}return p2, p2.avg - p1.avg}func main() {var tom person//賦值初始化tom.name, tom.avg = "Tom", 18//兩個欄位都寫清楚的初始化bob := person{avg: 25, name: "Bob"}//按照struct定義順序初始化paul := person{"Paul", 43}tb_Older, tb_diff := older(tom, bob)tp_Older, tp_diff := older(tom, paul)bp_Older, bp_diff := older(bob, paul)fmt.Printf("Of %s and %s, %s is older by %d years\n",tom.name, bob.name, tb_Older.name, tb_diff)fmt.Printf("Of %s and %s, %s is older by %d years\n",tom.name, paul.name, tp_Older.name, tp_diff)fmt.Printf("Of %s and %s, %s is older by %d years\n",bob.name, paul.name, bp_Older.name, bp_diff)}


輸出結果如下:
Of Tom and Bob, Bob is older by 7 yearsOf Tom and Paul, Paul is older by 25 yearsOf Bob and Paul, Paul is older by 18 years

struct的匿名欄位

我們上面介紹了如何定義一個struct,定義的時候是欄位名與其類型一一對應,實際上Go支援只提供類型,而不寫欄位名的方式,也就是匿名欄位,也稱為嵌入欄位。當匿名欄位是一個struct的時候,那麼這個struct所擁有的全部欄位都被隱式地引入了當前定義的這個struct
// struct2.gopackage mainimport ("fmt")type Human struct {name   stringage    intweight int}type Student struct {Human      //匿名欄位,那麼預設struct就包含了Human所有欄位speciality string}func main() {//初始化一個學生mark := Student{Human{"Mark", 25, 100}, "Computer Science"}//訪問相應的欄位fmt.Println("His name is ", mark.name)fmt.Println("His age is ", mark.age)fmt.Println("His weight is ", mark.weight)fmt.Println("His speciality is ", mark.speciality)//修改對應的資訊mark.speciality = "AI"fmt.Println("Mark changed his speciality")fmt.Println("His speciality is ", mark.speciality)//  修改他的年齡資訊fmt.Println("Mark become old")mark.age = 46fmt.Println("His age is", mark.age)//  修改他的體重資訊fmt.Println("Mark is not an athlet anymore")mark.weight += 60fmt.Println("His weight is", mark.weight)}

輸出結果:
His name is  MarkHis age is  25His weight is  100His speciality is  Computer ScienceMark changed his specialityHis speciality is  AIMark become oldHis age is 46Mark is not an athlet anymoreHis weight is 160

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.