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定義的時候是欄位名與其型別一一對應,上面通過匿名引用的方式而無需宣告欄位名。