七叶笔记 » golang编程 » golang interface实现原理

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)
 }  

反汇编后对应的汇编代码

相关文章