interface实现分析

在runtime包下的runtime2.go文件中
Go使用iface和eface来表达interface。iface其实就是内部有函数的interface

eface表示empty interface,从逻辑上来说,既然空接口没有任何函数,那所有对象就自然都实现了该interface。

空接口
type eface struct {
_type *_type
data unsafe.Pointer
}

type _type struct {
size uintptr
ptrdata uintptr
hash uint32
tflag tflag
align uint8
fieldalign uint8
kind uint8
alg *typeAlg

gcdata    *byte
str       nameOff
ptrToThis typeOff

}

非空接口
type iface struct {
tab *itab
data unsafe.Pointer
}

type itab struct {
inter *interfacetype
_type *_type
link *itab
bad int32
unused int32
fun [1]uintptr
}

iface适用场景
在go语言中,借助iface,实现了传统oop编程中DIP(dependency inversion princip),即依赖反转

eface是iface的子集,eface是为了优化

eface 适用场景
func Unmarshal(data []byte, v interface{}) error {}
使用interface主要是我们在不知道用户的输入类型信息的前提下,希望能够实现一些通用的数据结果或函数,将interface{}作为函数的输入/输出参数,泛型的使用场景。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值