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()
起作用,需要导出字段(即,其名称需要以大写字母开头):