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相关,但不完全是一个东西。
这次先总结到这,后续继续完善。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。