参考资料 - iface 和 eface 的区别是什么
iface 和 eface 都是 Go 中描述接口的底层结构体,区别在于 iface 描述的接口包含方法,而 eface 则是不包含任何方法的空接口:interface{}。
760 字
|
4 分钟
方法 - Go 原理
方法能给用户自定义的类型添加新的行为。它和函数的区别在于方法有一个接收者,给一个函数添加一个接收者,那么它就变成了方法。接收者可以是值接收者,也可以是指针接收者。
1485 字
|
7 分钟
参考资料 - 如何用 interface 实现多态
Go 语言并没有设计诸如虚函数、纯虚函数、继承、多重继承等概念,但它通过接口却非常优雅地支持了面向对象的特性。
478 字
|
2 分钟
参考资料 - 接口的动态类型和动态值
从源码里可以看到:iface包含两个字段:tab 是接口表指针,指向类型信息;data 是数据指针,则指向具体的数据。它们分别被称为动态类型和动态值。而接口值包括动态类型和动态值。
469 字
|
2 分钟
参考资料 - 接口的构造过程是怎样的
我们已经看过了 iface 和 eface 的源码,知道 iface 最重要的是 itab 和 type。
870 字
|
4 分钟
参考资料 - 接口转换的原理
通过前面提到的 iface 的源码可以看到,实际上它包含接口的类型 interfacetype 和 实体类型的类型 type,这两者都是 iface 的字段 itab 的成员。也就是说生成一个 itab 同时需要接口的类型和实体的类型。
1198 字
|
6 分钟
类型转换 - Go 原理
我们知道,Go 语言中不允许隐式类型转换,也就是说 = 两边,不允许出现类型不相同的变量。
1139 字
|
6 分钟
编译器自动检测类型是否实现接口 - Go 原理
经常看到一些开源库里会有一些类似下面这种奇怪的用法:
216 字
|
1 分钟