嵌入结构体
本课属于 Coddy GO 学习旅程的“基础知识”单元。第 99 课,共 109 课。
Go 允许你将一个结构体嵌入另一个结构体中,从而创建组合关系。这是 Go 实现继承的方式。
定义两个结构体,其中一个嵌入另一个结构体中:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // 嵌入的结构体(没有字段名)
}
func main() {
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
// 直接访问字段
fmt.Println(person.city) // 访问嵌入的字段
}
输出显示,我们可以直接访问嵌入式结构体的字段:
Portland挑战
入门在这个挑战中,你将练习在 Go 中使用嵌入式结构体(组合)。
我们有两个结构体:Address 和 Person。Person 结构体应嵌入 Address 结构体,这样就可以直接访问地址字段。
你的任务是完成 Person 结构体定义,将 Address 结构体嵌入其中。main 中的打印语句已经直接从 person 读取地址字段(person.Street、person.City、person.ZipCode);嵌入 Address 后,这些语句就能编译通过。
亲手试试
package main
import "fmt"
// Address 结构体包含地址信息
type Address struct {
Street string
City string
ZipCode string
}
// Person 结构体应嵌入 Address 结构体
type Person struct {
Name string
Age int
// TODO:在这里嵌入 Address 结构体(只需一行)
}
func main() {
// 创建一个包含地址信息的新 person
person := Person{
Name: "Alice",
Age: 30,
Address: Address{
Street: "123 Main St",
City: "Wonderland",
ZipCode: "12345",
},
}
// 输出 person 的信息,包括地址
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
// 直接从 person 实例中输出地址字段
fmt.Println("Street:", person.Street)
fmt.Println("City:", person.City)
fmt.Println("ZipCode:", person.ZipCode)
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Go 在线编译器