是否可以使用反射做类似于类型开关的操作?

时间:2015-09-04 19:19:54

标签: reflection go

我需要根据反映的值的类型做不同的事情。

value := reflect.ValueOf(someInterface)

我想做一些具有以下效果的事情:

if <type of value> == <type1> {
    do something
} else if <type of value> == <type2> {
    do something
}

这与类型转换在go代码中的作用类似。

1 个答案:

答案 0 :(得分:2)

如果要迭代结构的字段,可以使用类型开关根据字段的类型执行不同的操作:

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: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    }
}

https://play.golang.org/p/-B3PWMqWTo