我需要根据所反映的值的类型做不同的事情。
value := reflect.ValueOf(someInterface)
我想做一些有以下效果的事情:
if <type of value> == <type1> {
do something
} else if <type of value> == <type2> {
do something
}
这与go代码中的类型开关的作用类似。
如果要在结构体的字段上迭代,可以使用类型切换来根据字段的类型执行不同的操作:
value := reflect.ValueOf(s)
for i := 0; i < value.NumField(); i++ {
field := value.Field(i)
if !field.CanInterface() {
continue
}
switch v := field.Interface().(type) {
case int:
fmt.Printf("Int: %dn", v)
case string:
fmt.Printf("String: %sn", v)
}
}
https://play.golang.org/p/-B3PWMqWTo