基本概念
对所有接口进行反射,都可以得到一个包含Type和Value的信息结构。Type主要表达的是被反射的这个变量本身的类型信息,而Value则为该变量实例本身的信息。
基本用法
获取类型信息
以上代码将输出如下的结果:
Type和Value都包含了大量的方法,其中第一个有用的方法应该是Kind,这个方法返回该类型的具体信息:Uint、Float64等。Value类型还包含了一系列类型方法,比如Int(),用于返回对应的值。查看以下示例:
结果为:
获取值类型
类型Type中有一个成员函数CanSet(),其返回值为bool类型。如果CanSet()返回false,表示你不应该调用Set()和SetXxx()方法,否则会收到这样的错误信息:
注意区分以下代码:
片段1:
片段2:
对结构体的反射操作
以上例子的输出为:
可以看出,对于结构的反射操作并没有根本上的不同,只是用了Field()方法来按索引获取对应的成员。当然,在试图修改成员的值时,也需要注意可赋值属性。