关于Golang类型的讲解2——interface接口

本文深入探讨了Golang中的interface,包括空接口和非空接口的组成。非空接口由_interfacetype元数据结构表示,包含_type、hash和fun字段。文章解释了如何通过itab结构体实现非空接口类型的可复用性,并介绍了golang底层的map如何存储和复用这些信息,用于类型转换、断言和反射等操作。
摘要由CSDN通过智能技术生成

关于Golang类型的讲解2——interface接口

接上回,关于Golang类型的讲解1——内置类型和自定义类型



前言

上回,我们主要讲了golang中内置类型和自定义类型的定义、区别、以及本质的含义。明白了类型元数据在其中扮演的是一个记录各个类型的底层基础信息的角色,也了解了自定义类型相比内置类型在结构上的差异,也因此知道了为什么自定义类型可以关联function,而内置类型不能。接下来我们继续拓展开来,讲解下interface


一、什么是interface

interface,顾名思义——接口。也即是接口类型。而在我们的接口类型中还分为:空接口类型和非空接口类型。

二、接口类型的组成

1.空接口类型的组成

首先,空接口类型的数据结构组成由两部分组成:

_type *_type (指向接口的动态类型元数据)
data unsafe.pointer(指向接口的动态值)

对应结构体代码:

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

在此,我们举个例子。定义一个空接口类型,注意此时对应的元数据结构eface的成员变量 _type和data都为nil:

var emptyInter interface{
   } // eface{_type:nil,data:nil}

如果我们将某个变量a赋值给该空接口变量emptyInter,那么其成员变量:_type即是a的元数据结构信息;data则指向变量a。
举例:

var e interface{
   } // 对应的eface结构体:  eface{_type: nil, data:nil }

f,_:=os.Open(“eggs
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值