在Go中使用reflect.TypeOf()进行类型断言
在Go中,当使用接口时,可能需要执行类型断言获取底层的具体类型。出现的问题是如何将类型(由reflect.TypeOf()返回)转换为特定类型以进行断言。
问题:
考虑示例代码:
func IdentifyItemType(name string) interface{} { var item interface{} switch name { default: item = Article{} } return item }
在这里,我们的目标是根据字符串名称识别结构体(文章)。然而,类型断言需要一个类型,但reflect.TypeOf()返回一个Type。
解决方案:
如果目标是开启外层的类型interface{},反射不是必需的:
switch x.(type){ case int: dosomething() }
但是,要切换接口内的属性类型,反射可以是使用:
s := reflect.ValueOf(x) for i:=0; i<s.NumValues; i++{ switch s.Field(i).Interface().(type){ case int: dosomething() } }
这允许在接口的属性上进行类型的切换。虽然不是一个优雅的解决方案,但它提供了功能,直到发现更好的替代方案。
以上是如何对 Go `reflect.TypeOf()` 结果执行类型断言?的详细内容。更多信息请关注PHP中文网其他相关文章!