栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

第003节:结构体的嵌套

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第003节:结构体的嵌套

1.1 结构体的匿名字段

结构体的匿名字段

可以用字段来创建结构,这些字段只包含一个没有字段名的类型。这些字段被称为匿名字段。

在类型中,使用不写字段名的方式,使用另一个类型

type Human struct {    name string    age int    weight int} type Student struct {    Human // 匿名字段,那么默认Student就包含了Human的所有字段    speciality string} func main() {    // 我们初始化一个学生    mark := Student{Human{"Mark", 25, 120}, "Computer Science"}    // 我们访问相应的字段    fmt.Println("His name is ", mark.name)    fmt.Println("His age is ", mark.age)    fmt.Println("His weight is ", mark.weight)    fmt.Println("His speciality is ", mark.speciality)    // 修改对应的备注信息    mark.speciality = "AI"    fmt.Println("Mark changed his speciality")    fmt.Println("His speciality is ", mark.speciality)    // 修改他的年龄信息    fmt.Println("Mark become old")    mark.age = 46    fmt.Println("His age is", mark.age)    // 修改他的体重信息    fmt.Println("Mark is not an athlet anymore")    mark.weight += 60    fmt.Println("His weight is", mark.weight)}

可以使用"."的方式进行调用匿名字段中的属性值

实际就是字段的继承

其中可以将匿名字段理解为字段名和字段类型都是同一个

基于上面的理解,所以可以mark.Human = Human{"Marcus", 55, 220} 和mark.Human.age -= 1

若存在匿名字段中的字段与非匿名字段名字相同,则最外层的优先访问,就近原则

通过匿名访问和修改字段相当的有用,但是不仅仅是struct字段哦,所有的内置类型和自定义类型都是可以作为匿名字段的。

1.2 结构体嵌套

嵌套的结构体
一个结构体可能包含一个字段,而这个字段反过来就是一个结构体。这些结构被称为嵌套结构。

示例代码:

package mainimport (      "fmt")type Address struct {      city, state string}type Person struct {      name string    age int    address Address}func main() {      var p Person    p.name = "Naveen"    p.age = 50    p.address = Address {        city: "Chicago",        state: "Illinois",    }    fmt.Println("Name:", p.name)    fmt.Println("Age:",p.age)    fmt.Println("City:",p.address.city)    fmt.Println("State:",p.address.state)}

1.3 提升字段

在结构体中属于匿名结构体的字段称为提升字段,因为它们可以被访问,就好像它们属于拥有匿名结构字段的结构一样。理解这个定义是相当复杂的。

示例代码:

package mainimport (      "fmt")type Address struct {      city, state string}type Person struct {      name string    age  int    Address}func main() {      var p Person    p.name = "Naveen"    p.age = 50    p.Address = Address{        city:  "Chicago",        state: "Illinois",    }    fmt.Println("Name:", p.name)    fmt.Println("Age:", p.age)    fmt.Println("City:", p.city) //city is promoted field    fmt.Println("State:", p.state) //state is promoted field}

运行结果

Name: Naveen  Age: 50  City: Chicago  State: Illinois
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/793615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号