文章目录
1.接口的基础知识点
- 接口不能实例化,不能调用new函数或者make函数创建出一个接口类型的值
- 不能用字面量来表示一个接口类型的值
- 接口类型中声明的方法就是该接口的方法集合,一个接口的方法集合就是它的全部特征
- 对于任何数据类型,只要它的方法集合中完全包含了一个接口的全部方法,那么它就是该接口的实现类型
2.如何判断一个数据类型的某个方法就是某个接口类型中的某个方法?
- 方法签名需要完全一致
- 方法名称需要完全一致
3.当为一个接口类型赋值时会发生什么?
当给一个接口类型变量赋值的时候,该变量的动态类型会与它的动态值一起被存储在一个专用的数据结构中,这个数据结构叫做iface,iface的实例会包含两个指针,一个是指向类型信息的指针,一个是指向动态值的指针。
4.接口变量的值在什么情况下才真正为nil?
只声明不它不做初始化或者直接把字面量nil赋给接口变量。
5.接口之间的组合
- 接口类型间的嵌入被称为接口的组合
- 接口的组合不会有屏蔽现象发生,只要组合的接口之间有同名的方法就会产生冲突,从而无法编译通过,即使同名方法的签名不同也会这样
- Go语言鼓励声明体量较小的接口,并建议通过接口间的组合来扩展程序、增加程序的灵活性
6.如果我们把一个值为nil的某个实现类型的变量赋给了接口变量,那么在这个接口变量上仍然可 以调用该接口的方法吗?如果可以,有哪些注意事项?如果不可以,原因是什么?
可以,指针类型的方法可以被调用,但方法中不能涉及类型属性的调用
本节示例代码:demo GitHub