尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
GO_面向对象---匿名字段
Go 面向对象匿名字段核心知识点Go 语言没有传统的类继承而是通过匿名字段组合实现代码复用、类似继承的效果是 Go 面向对象的核心特性。一、Go 面向对象三大特性结合匿名字段继承通过匿名字段组合实现复用已有结构体的成员和方法封装隐藏内部实现只对外提供功能通过结构体 匿名字段实现多态通过接口实现二、匿名组合匿名字段1. 什么是匿名字段定义结构体时只写类型不写字段名这个字段就是匿名字段。作用直接复用另一个结构体的所有成员字段 方法。2. 基础语法示例gopackage main import fmt // 父结构体 type Person struct { name string // 姓名 sex byte // 性别 age int // 年龄 } // 子结构体匿名字段继承 Person type Student struct { Person // 匿名字段继承Person的所有成员 id int addr string }三、匿名字段初始化重点1. 完整初始化必须指定匿名字段结构体名gofunc main() { // 方式1var 定义 var s1 Student Student{Person{mike, m, 18}, 1, bj} fmt.Println(s1 , s1) // 方式2自动推导类型 s2 : Student{Person{mike, m, 18}, 1, bj} fmt.Printf(s2 %v\n, s2) }2. 指定成员初始化gofunc main() { // 只初始化 id其他字段默认零值 s3 : Student{id: 1} fmt.Printf(s3 %v\n, s3) // 显式初始化匿名字段的部分成员 s4 : Student{Person: Person{name: mike}, id: 1} fmt.Printf(s4 %v\n, s4) }错误写法必须记住go// 编译失败匿名字段不能直接展开赋值 // s5 : Student{mike, m, 18, 1, bj}规则初始化匿名字段时必须带上外层结构体名否则编译报错。四、成员操作匿名字段继承的成员可以直接访问 / 赋值和结构体自身成员一样。gofunc main() { s1 : Student{Person{mike, m, 18}, 1, bj} // 直接访问继承的字段 fmt.Println(s1.name, s1.sex, s1.age, s1.id, s1.addr) // 直接赋值 s1.name yoyo s1.age 16 fmt.Println(s1) }五、同名字段处理就近原则如果子结构体和匿名字段结构体有同名成员默认就近原则→ 优先使用子结构体自己的成员显式调用→子结构体.匿名字段类型.字段名gotype Person struct { name string } type Student struct { Person // 匿名字段 name string // 同名字段 } func main() { var s Student // 就近原则操作 Student 的 name s.name student // 显式调用操作 Person 的 name s.Person.name person fmt.Printf(s.name %s\n, s.name) // 输出 student fmt.Printf(s.Person.name %s\n, s.Person.name) // 输出 person }六、非结构体匿名字段匿名字段可以是基本类型、自定义类型不只是结构体。go// 自定义类型 type mystr string type Student struct { Person // 结构体匿名字段 int // 基本类型匿名字段 mystr // 自定义类型匿名字段 } func main() { s : Student{int: 100, mystr: hello} fmt.Println(s.int, s.mystr) }七、结构体指针作为匿名字段使用指针类型作为匿名字段节省内存传递引用。gotype Student struct { *Person // 指针匿名字段 id int addr string } func main() { // 方式1直接初始化 s1 : Student{Person{mike, m, 18}, 666, bj} fmt.Println(s1.name) // 直接访问自动解引用 // 方式2new 分配空间 var s2 Student s2.Person new(Person) // 分配内存 s2.name yoyo s2.sex m s2.age 18 s2.id 222 s2.addr sz fmt.Println(s2) }八、核心总结Go 没有继承只有匿名字段组合实现代码复用初始化匿名字段必须写结构体类型名否则编译失败同名字段遵循就近原则显式调用需指定匿名字段类型支持结构体、基本类型、指针类型作为匿名字段是 Go 实现类似继承的唯一方式
RELATED

相关推荐

Development statistics for the 7.1 kernel

Development statistics for the 7.1 kernel

Linus Torvalds 如期在 6 月 14 日发布了 7.1 内核。这一开发周期带来了大量新特性,同时也迎来了大批新开发者。现在是时候按照传统,来看看 7.1 的变更都来自何处,并顺便探讨一下我们的社区整体上可能正在发生怎样的变化。本次发布合并了来自…

📅 2026/11/10 11:54:14
计算机毕业设计之基于Springboot开放式实验室预约微信小程序

计算机毕业设计之基于Springboot开放式实验室预约微信小程序

随着高校教育资源的日益紧张,开放式实验室的预约管理成为提升实验教学效率和资源利用率的关键,本研究旨在设计并实现一个基于Spring Boot的开放式实验室预约微信小程序,以优化实验室资源分配,提高实验教学的便捷性和灵活性&#x…

📅 2026/11/10 11:54:13
C++并发编程:深入理解std::future异步任务与结果获取

C++并发编程:深入理解std::future异步任务与结果获取

1. 项目概述:为什么我们需要std::future?在C的世界里,尤其是当你从基础语法迈向构建高性能、响应迅速的实际应用时,多线程编程是绕不开的一道坎。但传统的多线程模型,比如直接使用std::thread,常常伴随着一…

📅 2026/10/4 22:43:55
MORE NEWS

更多资讯

📰

新吴区低压电工证多久拿证?外省证书能不能转过来

新吴区低压电工证多久拿证?外省证书能不能转过来 之前考的证在外省能不能转过来?这几乎是每个准备报考新吴区低压电工证的人最关心的问题,尤其是在如今跨省就业频繁的背景下,不少电工师傅都经历过这样的困扰。好消息是, 新吴区低压电工证…

📰

工地太忙根本没时间复习考试?考电工证可以喝酒吗,上岗必备知识全在这

工地太忙根本没时间复习考试?考电工证可以喝酒吗,上岗必备知识全在这 工地太忙根本没时间复习考试,这几乎是每个特种作业人员的真实写照。尤其是考电工证,很多工人在紧张的工作节奏中,常常忽略了考试前的准备,结果要么没通过,要么在考场上手忙脚乱,白…

📰

考低压电工证的测试题怎么考

低压电工证过期了不知道怎么复审?上岗必备的测试题你准备好了吗 证书过期了不知道怎么复审延期,这不是个别现象,很多一线电工朋友都遇到过。低压电工证作为 上岗必备…

📰

连平县电工证怎么考全流程办理指南:在哪考不被坑的干货

连平县电工证怎么考全流程办理指南:在哪考不被坑的干货 你是不是也在为连平县电工证怎么考发愁?不知道去哪报名怕被中介坑?别急,这篇文章就给你一套从零到一的全流程攻略,帮你避坑、省事、高效搞定电工证办理。…

📰

深圳中级电工证多少分报名费多少钱良心建议

深圳中级电工证多少分报名费多少钱良心建议 你是不是也和我一样,听说要考中级电工证,心里一万个问号?不知道去哪里报名,怕被中介骗,钱花了证没拿到,搞不好还被坑得不轻?今天咱们就来聊一聊这个【深圳中级电工证多少分】的干货,说说怎么避开坑,还能拿…

📰

农村电工证怎么查询保姆级教程:别再被中介骗了

农村电工证怎么查询保姆级教程:别再被中介骗了 你是不是也遇到过这种情况,想报考农村电工证,不知道去哪报名,怕被中介骗,结果耽误了时间还花了冤枉钱?别急,这 保姆级教程…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬