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

Reflection 是否可以使用反射执行类似于类型开关的操作?,reflection,go,Reflection,Go,我需要根据所反映的价值类型做不同的事情 value := reflect.ValueOf(someInterface) 我想做一些具有以下效果的事情: if <type of value> == <type1> { do something } else if <type of value> == <type2> { do something } if=={ 做点什么 }否则如果=={ 做点什么 } 这与go代码中的类型开关类

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

value := reflect.ValueOf(someInterface)
我想做一些具有以下效果的事情:

if <type of value> == <type1> {
    do something
} else if <type of value> == <type2> {
    do something
}
if=={
做点什么
}否则如果=={
做点什么
}

这与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: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    }
}
value:=reflect.ValueOf(s)
对于i:=0;i

再次检查:
type1
type2
是动态的,对吗?还有,你想实现什么?实际上,它们是go代码中定义的类型。那么你不能使用类型开关吗?我如何在类型值上使用类型开关(反射给我的)?从你的问题中,我不知道为什么需要
reflect.Value
,但是如果你只有这些,你可以做:
switch Value.Interface()(类型) {…
这将起作用-但如果字段为零,则不起作用。有没有办法直接按字段的类型进行操作?@Ziffusion:type开关作用于字段类型,而不是值。示例:@Ziffusion:type开关作用于字段类型,而不是值。请参阅:我的意思是,您所做的工作与字段值的类型无关。and它确实有效。但是如果字段值为零,它将不起作用。您可以通过更改示例代码来尝试不初始化结构(将字段保留为零)。@Ziffusion:为了使
Interface()
起作用,需要导出字段(即,其名称需要以大写字母开头):