Go 反射

1.基本概念

   对所有接口进行反射,都可以得到一个包含Type和Value的信息结构。Type主要表达的是被反射的这个变量本身的类型信息,而Value则为该变量实例本身的信息。


2.基本用法

2.1获取类型信息

Go 反射

   以上代码将输出如下的结果:

Go 反射

   Type和Value都包含了大量的方法,其中第一个有用的方法应该是Kind,这个方法返回该类型的具体信息:Uint、Float64等。Value类型还包含了一系列类型方法,比如Int(),用于返回对应的值。查看以下示例:

Go 反射

Go 反射

   结果为:

Go 反射

2.2获取值类型

   类型Type中有一个成员函数CanSet(),其返回值为bool类型。如果CanSet()返回false,表示你不应该调用Set()和SetXxx()方法,否则会收到这样的错误信息:

Go 反射

注意区分以下代码:

片段1:

Go 反射

片段2:

Go 反射


3.对结构体的反射操作

Go 反射

    以上例子的输出为:

Go 反射

   可以看出,对于结构的反射操作并没有根本上的不同,只是用了Field()方法来按索引获取对应的成员。当然,在试图修改成员的值时,也需要注意可赋值属性。