关于golang:go-reflect学习

4次阅读

共计 584 个字符,预计需要花费 2 分钟才能阅读完成。

go 的 reflect 很多博客都写了如何应用和各种示例,这里次要剖析下 reflect 中几个重要构造的关系。

reflect 包中最罕用的两个对外接口就是:

func TypeOf(i interface{}) Type
func ValueOf(i interface{}) Value

所以不得不提到 Type 和 Value 两个类型,看了代码会发现,Type 是个接口,Value 是个构造体。然而其实两者又都与 reflect 包中一个公有构造体无关,即 rtype
看下图:

从红色的①②能够看到 Value 构造体的次要字段 typ 就是 rtype 类型
从彩色的①②能够看到 TypeOf 接口返回的就是 rtype 类型自身,只是这个类型实现了 Type 定义的办法。所以要看 TypeOf 返回值调用的办法,就看 rtype 类型的办法实现。

再来看下 Value 这个构造体实现的办法

从图中能够看到,尽管 Value 和 Type 都有 field 的概念,然而其两者的 field 不是一个货色,Type 接口中波及的 field 是一个新的构造体 StructField,而 Value 办法中的 field 还是 Value 自身

另外,还有各个办法的调用条件也有限度,个别 field 的办法只能类型是 reflect.Struct 的类型能力调用。这个 Struct 是 reflect 定义的哦,跟平时说的 struct 相干,但不齐全是一个货色。

这次先总结到这,后续持续欠缺。

正文完
 0