Go语言结构体嵌套的用法
Go 语言中,结构体的每个成员可以设置不同的数据类型,如果某个成员的数据类型为结构体,就可以实现结构体间的嵌套。
结构体嵌套是将一个结构体成员设为另一个结构体,使结构体之间形成简单的递进关系,其语法结构如下:
在实例化 person 的时候,成员 cars 代表结构体 cars 的实例化变量,具体的使用方法如下:
运行上述代码,运行结果为:
结构体嵌套还可以使用匿名结构体实现,若遇到多重结构体嵌套,使用匿名结构体可以省去定义多个结构体,示例如下:
结构体嵌套是将一个结构体成员设为另一个结构体,使结构体之间形成简单的递进关系,其语法结构如下:
type cars struct { name string price int } type person struct { name string age int cars cars }上述语法定义了两个结构体,分别为 cars 和 person,其中结构体 person 的成员 cars 的数据类型指向结构体 cars,这样就能实现结构体嵌套。
在实例化 person 的时候,成员 cars 代表结构体 cars 的实例化变量,具体的使用方法如下:
package main import "fmt" func main() { type cars struct { name string price int } type person struct { name string age int cars cars } c := cars{name: "BWM", price: 500000} p := person{name: "Tim", age: 30, cars: c} fmt.Printf("个人名称:%v\n", p.name) fmt.Printf("个人年龄:%v\n", p.age) fmt.Printf("个人拥有车辆:%v\n", p.cars.name) fmt.Printf("车辆价钱为:%v\n", p.cars.price) }上述代码说明如下:
- 结构体 cars 嵌套在 person 的成员 cars 中,使得结构体 person 具备 cars 的所有成员,如果从面向对象角度分析,子类 person 继承了父类 cars。
- 通过结构体 person 访问 car 的成员也是使用实心点“.”,如 p.cars.name,p 代表结构体 person;car 代表 person 的成员,也是结构体 cars 的实例化变量;name 代表结构体 cars 的成员。
运行上述代码,运行结果为:
个人名称:Tim
个人年龄:30
个人拥有车辆:BWM
车辆价钱为:500000
结构体嵌套还可以使用匿名结构体实现,若遇到多重结构体嵌套,使用匿名结构体可以省去定义多个结构体,示例如下:
package main import "fmt" func main() { type cars struct { name string price int } type person struct { name string age int cars cars hourse struct { name string price int } } c := cars{name: "BWM", price: 500000} p := person{name: "Tim", age: 30, cars: c} fmt.Printf("个人名称:%v\n", p.name) fmt.Printf("个人年龄:%v\n", p.age) fmt.Printf("个人拥有车辆:%v\n", p.cars.name) fmt.Printf("车辆价钱为:%v\n", p.cars.price) }我们在结构体 person 中定义了成员 hourse,它的数据类型是结构体,但以匿名结构体的方式定义,使用匿名结构体实现结构体嵌套能在代码中直观看出结构体的数据结构,但嵌套在内的结构体无法在其他代码中使用,某种程度上不符合代码复用的设计思想。