go的reflect很多博客都写了如何应用和各种示例,这里次要剖析下reflect中几个重要构造的关系。
reflect包中最罕用的两个对外接口就是:
func TypeOf(i interface{}) Typefunc 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相干,但不齐全是一个货色。
这次先总结到这,后续持续欠缺。