go语言封装是怎么回事( 六 )


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

go语言封装是怎么回事

文章插图
 

go语言封装是怎么回事

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

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

go语言封装是怎么回事

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

go语言封装是怎么回事

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

go语言封装是怎么回事

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

go语言封装是怎么回事

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

go语言封装是怎么回事

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

go语言封装是怎么回事

文章插图
 
别名可以看成单字段结构体的简化形式,可以用来扩展已存在的结构体类型,也支持方法等特性.
最后,非常感谢你的阅读,鄙人知识浅薄,如有描述不当的地方,还请各位看官指出,你的每一次留言我都会认真回复,你的转发就是对我最大的鼓励!
 
如果需要查看相关源码,可以直接访问 https://github.com/snowdreams1006/learn-go,同时也推荐关注公众号与我交流.

【go语言封装是怎么回事】


推荐阅读