所以剩下的方法就是组合了,这也是学习面向对象时的前人总结的一种经验: 多用组合少用继承!
现在想一想,Go 语言不但贯彻了这一思想,更是严格执行了,因为 Go 直接取消了继承特性.

文章插图

文章插图
通过自定义结构体内部属性是 Lang 类型,进而扩展原来 Lang 不具备的方法或者重写原来的方法.如果我们的自定义结构体刚好只有这么一个属性,完全可以使用简化形式,说到这里其实有必要特别说明一下,专业叫法称之为别名.

文章插图
作为设计者和使用者都已经考虑到了,封装的基本知识也要告一段落了,由于 Go 不支持继承,也没必要演示相关代码,唯一剩下的只有接口了.
虽然 Go 同样是不支持多态,但是 Go 提供的接口确实与众不同,别有一番滋味在心头,下一节将开始探索接口.
关于封装的复盘
- 定义结构体字段

文章插图
结构体有多个字段时彼此直接换行,不用逗号也不用分号之类的,不要多此一举.
- 定义结构体方法

文章插图
原本是普通的函数,函数名前面加入指向当前结构体的参数时,函数不再是函数而是方法,同时当前结构体参数叫做接收者,类似于其他面向对象语言中的 this 或 self 关键字实现的效果.
- 字面量声明结构体

文章插图
字面量声明结构体除了这种类似于有参构造函数使用方式,还有无参和全参构造函数使用方式,这里说的构造函数只是看起来像并不真的是构造函数.
- new 声明结构体

文章插图
new 函数和其他主流的编程语言 new 关键字类似,用于声明结构体,不同于字面量声明方式,new 函数的输出对象是指针类型.
- 首字母大小写控制访问权限
不论是变量名还是方法名,名称首字母大写表示公开的,小写表示私有的.
- 代码的基本组织单元是包
访问控制权限也是针对代码包而言,一个目录下只有一个代码包,包名和目录名没有必然联系.
- 复合扩展已有类型

文章插图
自定义结构体内嵌其他结构体,通过复合而不是继承的方式实现对已有类型的增强控制,也是一种推荐的编程规范.
- 别名扩展已有类型

文章插图
别名可以看成单字段结构体的简化形式,可以用来扩展已存在的结构体类型,也支持方法等特性.最后,非常感谢你的阅读,鄙人知识浅薄,如有描述不当的地方,还请各位看官指出,你的每一次留言我都会认真回复,你的转发就是对我最大的鼓励!
如果需要查看相关源码,可以直接访问 https://github.com/snowdreams1006/learn-go,同时也推荐关注公众号与我交流.
【go语言封装是怎么回事】
推荐阅读
- 茶人必知六宗最
- 什么是Spring?
- TCP粘拆包详解与Netty代码示例
- 从零完成k3s Kubeconfig配置
- 梦到下山是什么意思啊 梦到下山路很陡很危险很难走
- 回溯 什么是Python回溯? Traceback
- 别人梦见我生小孩是什么征兆 别人梦见我生小孩
- 主板上到处都可以看到电容,每颗电容在每个电路作用是不一样的
- 亨利福特发展的制造技术是什么 亨利福特对汽车工业的贡献
- 什么是系统架构?
