您的位置 首页 golang

golang interface实现原理

从实现上来讲,golang有两种类型的interface: iface和eface.

实现的代码在

 
type iface struct {
   tab  *itab  //见itab说明
   data unsafe.Pointer  //指向数据存储的地方
}

type eface struct {
   _type *_type  
   data  unsafe.Pointer
}

type itab struct {
	inter *interfacetype  //interface的类型
	_type *_type  //实际运行中赋值的变量的类型
	hash  uint32 // copy of _type.hash. Used for type switches.
	_     [4]byte
	fun   [1]uintptr // variable sized. fun[0]==0 means _type does not implement inter.
}
  

从代码实现上来看, eface只是包含类型信息和指向数据的指针。iface还包括了函数集等信息。

反汇编iface空接口实现代码

 package main

 import "fmt"

 func main() {
     var i interface{}
     var num int = 128
     i=num
     fmt.Println(i)
 }  

反汇编后对应的汇编代码

文章来源:智云一二三科技

文章标题:golang interface实现原理

文章地址:https://www.zhihuclub.com/86602.shtml

关于作者: 智云科技

热门文章

发表评论

您的电子邮箱地址不会被公开。

网站地图