golang:结构体内嵌结构体
内嵌结构体
结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字。匿名字段本身可以是一个结构体类型,即结构体可以包含内嵌结构体。
golang语言中的继承是通过内嵌或组合来实现的,所以可以说,在Go语言中,相比较于继承,组合更受青睐。
package mainimport "fmt"type innerS struct {in1 intin2 int
}type outerS struct{b intc float32int //匿名字段innerS // 匿名字段
}func main() {outer := new(outerS)outer.b = 6outer.c = 7.5outer.int = 60outer.in1 = 5outer.in2 = 10fmt.Printf("outer.b is: %d\n", outer.b)fmt.Printf("outer.c is: %f\n", outer.c)fmt.Printf("outer.int is: %d\n", outer.int)fmt.Printf("outer.in1 is: %d\n", outer.in1)fmt.Printf("outer.in2 is: %d\n", outer.in2)outer2 := outerS{b: 6,c: 7.5,int: 1,innerS: innerS{5,10,},}fmt.Println(outer2)
}
- 通过类型 outer.int 的名字来获取存储在匿名字段中的数据,于是可以得出一个结论:在一个结构体中对于每一种数据类型只能有一个匿名字段。
- 同样地结构体也是一种数据类型,所以它也可以作为一个匿名字段来使用,如同上面例子中那样。外层结构体通过 outer.in1 直接进入内层结构体的字段,内嵌结构体甚至可以来自其他包。内层结构体被简单的插入或者内嵌进外层结构体。这个简单的“继承”机制提供了一种方式,使得可以从另外一个或一些类型继承部分或全部实现。
结构内嵌特性
Go语言的结构体内嵌有如下特性。
- 内嵌的结构体可以直接访问其成员变量
嵌入结构体的成员,可以通过外部结构体的实例直接访问。如果结构体有多层嵌入结构体,结构体实例访问任意一级的嵌入结构体成员时都只用给出字段名,而无须像传统结构体字段一样,通过一层层的结构体字段访问到最终的字段。例如,ins.a.b.c的访问可以简化为ins.c。
- 内嵌结构体的字段名是它的类型名
内嵌结构体字段仍然可以使用详细的字段进行一层层访问,内嵌结构体的字段名就是它的类型名,代码如下:
var c Color
c.BasicColor.R = 1
c.BasicColor.G = 1
c.BasicColor.B = 0
一个结构体只能嵌入一个同类型的成员,无须担心结构体重名和错误赋值的情况,编译器在发现可能的赋值歧义时会报错。
golang:结构体内嵌结构体相关推荐
- c语言结构体内嵌结构体指针_C语言中的结构指针
c语言结构体内嵌结构体指针 Prerequisite: 先决条件: Structures in C programming language. C编程语言中的结构. Dynamic Memory al ...
- Go语言学习-- No.11结构体--结构体内嵌
结构体内嵌 结构体内嵌 结构体内嵌的初始化 结构体内嵌 Go语言的结构体内嵌是一种组合特性,使用结构体内嵌可构建一种面向对象编程思想中的继承关系. 结构体实例化后,可直接访问内嵌结构体的所有成员变量和 ...
- Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)
1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...
- C++之指针探究(十七):结构体内嵌函数指针实现分层
相关博文:C++之指针探究(十三):函数指针数组 相关博文:C++之指针探究(十二):指针.下标.数组及其作函数参数探究 相关博文:C++之指针探究(十一):函数名的本质和函数指针 相关博文:C++之 ...
- 结构体内嵌比较函数bool operator (const node x) const {}
直接看别人的链接 [http://www.cnblogs.com/ZERO-/p/9347296.html] 转载于:https://www.cnblogs.com/mch5201314/p/9978 ...
- 换个语言学一下 Golang (9)——结构体和接口
换个语言学一下 Golang (9)--结构体和接口 基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就 ...
- c语言 char转int_图文并茂,一文讲透C语言结构体内存对齐
↑点击上方蓝色字体,关注"嵌入式软件实战派"获得更多精品干货. (以下有约5000字内容,建议收藏再读,推荐下载源码自行测试以加深理解.) 面试官:你知道C语言的结构体对齐吗? 应 ...
- golang map嵌套struct 结构体字段 不能直接修改 解决方法
目录 错误信息 错误原因 解决方法 错误信息 Reports assignments directly to a struct field of a map 错误原因 结构体作为map的元素时,不能够 ...
- 在Golang里如何实现结构体成员指针到结构体自身指针的转换
原文地址:http://goworldgs.com/?p=37 在C语言中有一个经典的宏定义,可以将结构体struct内部的某个成员的指针转化为结构体自身的指针.下面是一个例子,通过FIELD_OFF ...
最新文章
- Python全栈工程师(多继承、函数重写)
- IIS 的负载均衡【IIS7.0以上才可以使用】---- Application Request Routing(ARR)
- 【Java】Integer.valueOf()
- python中提取几列_Python一键提取PDF中的表格到Excel(实例50)
- 企业如何建设BI商业智能系统
- Spring 事务管理tx,aop
- PouchContainer 开源版本及内部版本一致性实践
- AspectJ中5种类型的增强注解有什么区别?
- Bootstrap框架---Uploadify插件----多张图片上传交互方式一
- Autumn源码解读
- 坯子库和suapp哪个好用_关于Sketchup插件安装使用,你应该知道的那些事
- Android安卓仿IOS音量调节-自定义view系列(4)
- 【前置句与倒装句练习题】否定词放句首的倒装
- 浏览器开发者模式获取页面元素
- 如何将传统 Web 框架部署到 Serverless
- 微信彩蛋表情雨秘笈大全
- DNS代理的搭建方式以及解析方式设定
- Oracle-存储过程ppt讲解
- IT30:新门店开业前IT准备工作!
- Qt常用控件介绍(一)
热门文章
- 哥德尔定理的正规表述
- Ubuntu 18.04安装ROS Melodic
- 【转自oschina网站】Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集
- IntelliJ IDEA 字体设置
- 敖包相会:CECS三工作组联欢贺新年
- 计算机一级考试ps知识点,计算机一级考试PS备考复习题及答案2017
- python对市场营销的认识和理解_我对市场营销的认识
- JAVA树状结构转List平面
- 文言文编程可以编译成PHP吗,人人都可以学会编译原理-开篇
- Java使用JaxWsDynamicClientFactory和HttpURLConnection调取Webservice接口