struct的匿名用法詳解

周伯通的麥田發表於2018-11-04

Go只提供型別而不用寫欄位名的方式,也就是匿名欄位,也稱為嵌入欄位。

當匿名欄位是一個struct的時候,那麼這個struct所擁有的全部欄位都被隱式地引入了當前定義的這個struct。

舉個例子,看例項可以更具體化理解:

package main
import "fmt"

type Person struct {
    name string
    age int
    weight int
}

type Student struct {
    Person  // 匿名欄位,那麼預設Student就包含了Person的所有欄位
    speciality string
}

func main() {

    mark := Student{Person{"喬峰", 25, 120}, "擒龍手"}// 初始化一個學生

    // 訪問相應的欄位
    fmt.Println("名字是", mark.name)
    fmt.Println("年齡是 ", mark.age)
    fmt.Println("體重是 ", mark.weight)
    fmt.Println("技能是", mark.speciality)
    // 修改對應的技能資訊
    mark.speciality = "降龍十八掌"
    fmt.Println("技能更新升級")
    fmt.Println("新技能是 ", mark.speciality)
    // 修改他的年齡資訊
    mark.age = 36
    fmt.Println("現在的年齡是", mark.age)
    // 修改他的體重資訊
    mark.weight += 30
    fmt.Println("現在的體重是", mark.weight)
}

通常struct定義的時候是欄位名與其型別一一對應,上面通過匿名引用的方式而無需宣告欄位名。

相關文章