本篇是针对前面
关于接口
文章的总结
:
希望以后
可以只看
本篇总结
,就可以快速
的回忆
,理解
关于接口
的核心
知识点
A、Go语言中接口
的背后设计原则
? (这一点跟其他语言
有很大不同
)
-
Go语言的
接口
设计是非侵入式
的,-
A、接口
编写者
的视角
看,
无须
知道接口
被哪些
类型实现。 -
B、接口
实现者
的视角
看,-
a) 只需要知道实现的是
什么
样子的接口
,无须
指明实现
的是哪个
接口。 -
b)
编译器
知道最终编译
时使用哪个
类型实现
哪个接口,或者接口
应该由谁来实现。 -
c) 比方说
Java
,在实现某个接口
的时候,必须
在实现类上,指明
自己实现的哪个接口,这样的话,就会导致编译速度慢
,而Go语言并没有
指明自己实现哪个
接口,这些工作交给了编译器
来完成
-
-
-
Go语言中
接口
的实现是隐式
的?
就是说,类型T在实现
某个接口
时,不
需要像Java那有必须显示
的使用implement
关键字,只要
满足条件
就可以表明
类型T实现
了接口
B、如何理解
Go语言中的接口设计是非侵入式
的?
Go语言的接口实现是
隐式
的,无须
让实现接口的类型
写出实现
了哪些接口
C、接口
设计成非侵入式
有什么好处
?
-
不会
发生雪崩式
的重新编译:
实现者在编写方法时,
无法预测
未来哪些方法
会变为接口
。一旦某个接口创建出来,要求旧的代码来实现这个接口时,就需要修改旧的代码的
派生部分
,这一般会造成雪崩式
的重新编译
。比如Java,如果
父类接口
中的方法
发生了变化,导致
所有的实现类都得
变化
-
彻底实现
接口
的设计
跟实现
的解耦
,一个只管设计,一个只管实现,互相不认识,只是在编译层面进行关联 -
非侵入式
设计让实现者
的所有类型
均是平行
的、组合
的;不需要
同时也不可能有“类派生图”
,开发者
唯一需要关注
的就是“我需要什么?”
,以及“我能实现什么?”
。
D、Go语言中的接口
跟其他语言中的接口如Java,有什么区别
?
A、如
Java
中存在派生式
接口,类型间存在强耦合
的父子
关系,可能存在很复杂
的“派生树”
B、而Go语言中,
非侵入式
设计让实现者
的所有类型
均是平行
的、组合
的;不需要
同时也不可能有“类派生图”
,开发者
唯一需要关注
的就是“我需要什么?”
,以及“我能实现什么?”
。
1、Go语言接口
声明(定义)
通过关键词汇
,实现快速
理解,记忆
的目的
:
1、Go语言
不
是一种传统
的面向对象
编程语言,它里面没有类
和继承
的概念2、Go语言中,接口类型
不
会和特定的实现
细节绑定
在一起,这种抽象方式
使得函数更加灵活
和更加具有适应
能力3、
接口
是一种类型
,也是一种抽象
结构,不会
暴露所含
数据的格式
、类型
以及结构
4、
接口
是用来做
什么的?
接口
是用来对外
的,实现生产者
和调用者
的分离,解耦;如果是这个
目的
,就可以创建
,设计
接口5、
接口
设计原则
?接口里的方法
不
建议太多
,能够达到准确
的描述
自己的功能
,即可。
提倡
,通过简单
接口之间的嵌套
或者组合
从而实现
复杂的接口
2、Go语言实现接口
的条件
通过关键词汇
,实现快速
理解,记忆
的目的
:
1、实现
接口
的类型
要求?或者说,哪些
类型可以实现
接口?
非接口
类型,可以实现接口
接口
类型,同样
也可以实现接口2、Go语言中
两个
类型之间
的实现
关系?
是通过Go语言编译器
自动 检查的,无须显示
的表明,如无须通过implement
关键字来表示3、Go语言中的
接口
跟其他语言中的接口如Java,有什么区别
?A、如
Java
中存在派生式
接口,类型间存在强耦合
的父子
关系,可能存在很复杂
的“派生树”
B、而Go语言中,
非侵入式
设计让实现者
的所有类型
均是平行
的、组合
的;不需要
同时也不可能有“类派生图”
,开发者
唯一需要关注
的就是“我需要什么?”
,以及“我能实现什么?”
。4、既然Go语言中
没有显示
的表明类型实现
了哪个
接口,那么Go语言是如何
来做的呢?隐式
A、接口
被实现
的条件一:接口的方法
与实现接口的类型方法
格式一致
B、接口被实现的条件
二
:接口中所有方法均被
实现
3、Go语言类型
与接口
的关系
通过关键词汇
,实现快速
理解,记忆
的目的
:
1、Go语言中
类型
与接口
的对应
关系
A、一对多一个类型可以
同时
实现多个
接口,而接口
间彼此独立
,不知道
对方的实现
。B、多对一
image
2、一个接口可能有10个方法,不
一定非要一个
结构体来实现,可以
有多个
结构体组合
内嵌后共同实现,就行了
4、Go语言类型断言
简述
类型断言是组什么的?
用于检查
image接口
类型变量
所持有的值
是否实现
了期望
的接口
或者具体
的类型。
5、Go语言接口和类型之间的转换
1、如果一个
类型
同时实现了多个
接口,那么可以
在这几个接口之间
进行转换
。2、接口是否可以
转换
为其他
类型?可以在 Go 语言中自由进行,前提是
已经
完全实现
。3、接口
断言
跟if
?A、接口断言
类似于
流程控制中的if
。B、
但
大量类型断言
出现时,应使用更为
高效的类型分支
switch 特性。
6、Go语言中的空接口
类型
通过关键词汇
,实现快速
理解,记忆
的目的
:
1、什么是
空接口
?
空接口是
接口
类型的特殊
形式空接口
没有任何
方法
任何
类型都无须
实现空接口任何
值
都满足
这个接口的需求类似于Java中的
object
2、
空接口
可以做什么
?
- 可以
存储
任何值,
- 建议,尽量
少使用
这个特性,因为比直接
使用数据对应
的类型,稍微慢些
可以从空接口中
取出
原值空接口 可以 做
比较运算
作为
形参
传递
7、Go语言类型分支
(switch判断空接口
中变量
的类型
)
通过关键词汇
,实现快速
理解,记忆
的目的
:
1、类型断言的
书写格式书写
格式:
2、类型断言
例子1: 断言基本
类型
基本类型断言
3、类型断言
例子2: 断言接口
类型
接口类型断言4、
断言
分支的最终
目的?
就是判断
出接口类型,属于
什么类型
,然后做出响应
的业务
处理
8、Go语言中error
接口
通过关键词汇
,实现快速
理解,记忆
的目的
:
1、error接口?
A、是Go语言中作为
错误处理
的标准
描述,如果函数要返还错误
的话,则返回值列表中肯定
有error, 可以逐层
返回,直到被处理。B、建议,error作为
最后一个
返回值2、error
基本
用法?创建一个 error 最简单的方法就是
error基本用法调用
errors.New 函数,它会根据传入的错误信息
返回一个新
的 error
3、如何
自定义错误
类型? 如:A、
定义
一个结构体
B、实现
自定义错误类型Error()
方法,即可
网友评论