3、匿名属性
- 没有指定属性名称,只有属性的类型, 我们称之为匿名属性
- 任何有命名的数据类型都可以作为匿名属性(int、float、bool、string、struct等)
package mainimport "fmt"func main() {type Person struct {intfloat32boolstring}// 不指定名称初始化per1 := Person{3, 3.14, false, "lnj"}fmt.Println(per1)// 可以把数据类型作为名字显示初始化per2 := Person{int:3,float32: 3.14,bool:true,string:"lnj",}fmt.Println(per2)// 可以把数据类型当做属性名称操作结构体per2.int = 666fmt.Println(per2.int) // 666}- Go语言中最常见的匿名属性是用结构体类型作为匿名属性
package mainimport "fmt"func main() {type Person struct {name stringageint}type Student struct {Person // 匿名属性classstring}stu := Student{Person{"lnj", 33},"学前一班",}fmt.Println(stu) // {{lnj 33} 学前一班}}- 如果结构体作为匿名属性, 想访问匿名属性的属性有两种方式
package mainimport "fmt"func main() {type Person struct {name stringageint}type Student struct {Person // 匿名属性classstring}stu := Student{Person{"lnj", 33},"学前一班",}fmt.Println(stu) // {{lnj 33} 学前一班}// 方式一: 先找到匿名属性,再访问匿名属性中的属性stu.Person.name = "zs"fmt.Println(stu) // {{zs 33} 学前一班}// 方式二: 直接访问匿名属性中的属性// 系统会先查找当前结构体有没有名称叫做name的属性// 如果没有会继续查找匿名属性中有没有名称叫做name的属性stu.name = "ww"fmt.Println(stu) // {{ww 33} 学前一班}}- 注意点: 如果多个匿名属性的属性名称相同,那么不能通过方式二操作,只能通过方式一
package mainimport "fmt"func main() {type Person struct {name stringageint}type Class struct {name stringtime string}type Student struct {Person // 匿名属性Class// 匿名属性}stu := Student{Person{"lnj", 33},Class{"学前一班", "2020-12-12"},}fmt.Println(stu) // {{lnj 33} {学前一班 2020-12-12}}// 编译报错, 系统搞不清楚要找哪个name//stu.name = "zs"stu.Person.name = "zs"stu.Class.name = "小学一年级"fmt.Println(stu) // {{zs 33} {小学一年级 2020-12-12}}}- 注意点: 只有匿名结构体才支持向上查找
package mainimport "fmt"func main() {type Person struct {name string}type Student struct {per Personage int}var stu Student = Student{Person{"lnj"}, 18}//fmt.Println(stu.name) // 报错fmt.Println(stu.per.name) // 必须通过属性进一步查找fmt.Println(stu.age)}- 注意点: 如果匿名属性是一个结构体类型, 那么这个结构体类型不能是自己
package mainfunc main() {type Person struct {Person // 错误namestring}type Student struct {*Student // 正确, 链表ageint}var stu Student = Student{age: 32}var stu2 Student = Student{&stu, 18}fmt.Println(stu)fmt.Println(stu2)}推荐阅读
- 清明节缅怀英烈 清明节缅怀先烈的寄语有哪些
- 自考和专升本一样吗 自考本科跟专升本区别
- 特别酷的符号昵称 有哪些火爆的昵称符号
- 不要买集成灶 为什么不建议安装集成灶
- 对老公心寒绝望的说说 对老公心寒绝望的句子有哪些
- 关于牛年的吉祥语言 关于牛年的吉祥语有哪些
- SPA、水疗和泰式马杀鸡的区别! 什么是spa
- 激励孩子努力上进的话短句 有哪些激励孩子努力上进的话
- 庆祝我国建党100周年的诗歌 庆祝建党100周年的诗歌有哪些
- |钓鱼人该“减重”了!渔具越多、鱼获越少不是没有道理
