反射操作普通变量-获取变量值

未匹配的标注

获取变量值

结合前面“反射的应用”章节,我们知道,变量、interface{}和reflect.Value之间是可以相互转换的。使用反射机制获取变量值时,要求数据类型匹配。即:

int类型变量v ——> reflect.Value(v).Int() 才能取值。

Float类型变量 f ——> reflect.Value(f).Float() 来进行取值。

Bool类型变量 bl ——> reflect.Value(bl).Bool() 来取变量的值。

如若传给 interface 的是 int 类型,而在函数内部使用reflect.Value(f).Float() 是不能正确取出数据值的。但需要注意的是,编译器是不能发现该错误的!只有程序运行起来,使用了反射才能报出错误:

painc:reflect:call of reflect.Value.Float on int Value.

本章开篇我们即强调过“reflect包实现了运行时反射”

如果是自定义类型。如:结构体。由于不像 int、bool、float64、string 一样,有现成的封装好的方法。如:Int()、Bool()、Float()……等方法,所以只能使用断言。

但,即使是结构体类型,其成员也是由基础数据类型组成的。因此我可以先获取到其成员的具体类别,再使用已有的方法逐一获取其数据。

获取变量类别,可以使用 Type 或 Value 的kind() 方法来实现。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
wangchunbo
讨论数量: 0
发起讨论 只看当前版本


暂无话题~