type any added in go1.18

type any = interface{}
any is an alias for interface{} and is equivalent to interface{} in all ways

any是空接口的别名,在go1.18后引入

接口是两件事物:它是一组方法,也是一种类型。
interface{} 类型是没有方法的接口。由于没有 implements 关键字,所有类型都至少实现零个方法,并且自动满足接口,所有类型都满足空接口,所以空接口能够被用来存储任意类型的值


inerface{}底层实现

type emptyInterface struct {
   typ  *rtype            // 类型描述
   Word unsafe.Pointer    // 值
}

可以看到其包含一个类型描述和一个值

type rtype struct {
   size       uintptr
   ptrdata    uintptr
   hash       uint32
   tflag      tflag
   align      uint8
   fieldAlign uint8
   kind       uint8
   alg        *typeAlg
   gcdata     *byte
   str        nameOff
   ptrToThis  typeOff
}

空接口嵌入的类型,我们可以映射导出字段或列出方法

标签: none

评论已关闭