Go語言基礎:struct

跟C語言或其它語言一樣,也有結構體struct。C語言中用關鍵詞typedef來給結構體定義,Go中用的都是type。

struct語法格式

type typeName struct {
...
}

例如:

type person struct {
    name string
    age int
}

struct聲明

var P person
P.name = "Sun"
P.age = 30
//也可以
P := peron{"Sun", 30}
//通過 field:value 的方式初始化,這樣可以任意順序
P := person{age:29, name:"Sun"}

上面有三種聲明的方法,其中第三種比較特殊,是Go獨有的聲明。

struct的匿名字段

匿名字段也稱爲嵌入字段,C語言中也有這個功能,但是再Go中它比C更強大,更自由。

package main

import "fmt"

type Course []string

type Student struct {
    name  string
    age   int32
    grade string
}

type Class struct {
    Student // 匿名字段,struct
    Course  // 匿名字段,自定義的類型
    int32   // 內置類型作爲匿名字段
    teacher string
}

func main() {
    stu1 := Class{Student: Student{"Rob", 10, "4年紀"}, teacher: "杰倫"}

    //修改Course字段
    stu1.Course = make([]string, 5)
    stu1.Course[0] = "English"
    stu1.Course = append(stu1.Course, "Chinsese")

    //修改匿名內置類型字段
    stu1.int32 = 4

    fmt.Print(stu1)
}

輸出:

{{Rob 10 4年紀} [English     Chinsese] 4 杰倫}

上面的例子,可以看出Go中的struct不僅可以將struct作爲匿名字段,用type自定的類型以及內置的類型都可以作爲匿名字段。這點比C語言要強大自由多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章