Go语言interface(接口)底层实现-1

本文探讨了Go语言中interface的实现,分为iface和eface两种类型。eface用于无方法的接口,包含类型信息和数据信息,而iface则用于有方法的接口,存储类型描述和方法集指针。通过具体代码示例展示了不同类型赋值给接口后的内部结构。
摘要由CSDN通过智能技术生成

Go的interface源码在Golang源码的runtime目录中。
Go在不同版本之间的interface结构可能会有所不同,但是,整体的结构是不会改变的,此文章用的Go版本是1.11。

Go的interface是由两种类型来实现的:iface和eface。
其中,iface表示的是包含方法的interface,例如:

 
  1. type Person interface {

  2.     Print()

  3. }

而eface代表的是不包含方法的interface,即

type Person interface {}


或者

var person interface{} = xxxx实体

eface

eface的具体结构是:

一共有两个属性构成,一个是类型信息_type,一个是数据信息。
其中,_type可以认为是Go语言中所有类型的公共描述,Go语言中几乎所有的数据结构都可以抽象成_type,是所有类型的表现,可以说是万能类型,
data是指向具体数据的指针。

type的具体代码为:

 
  1. type _type struct {

  2. size uintptr

  3. ptrdata uintptr // size of memory prefix holding all pointers

  4. hash uint32

  5. tflag tflag

  6. align u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值