我有一些接口,以及任意实现这些接口的 n 个结构。我想保留一组类型并能够对它们运行循环以查看实现了哪些类型。是否可以存储这样的类型?我花了一点时间使用反射包,但无法真正找到我想要的东西,我明白这是否不是最佳实践。尝试做类似的事情......没有巨大的类型开关,失败,或者如果......如果......如果......
type InterOne interface {
InterOneMethod() string
}
var interfaceMap = map[string]type {
"One": InterOne,
...
}
func doesHandle(any interface{}) []string {
var handles []string
for k, v := range interfaceMap {
if _, ok := any.(v); ok {
handles = append(handles, k)
}
}
return handles
}
编辑:标记为正确的答案在技术上是正确的。我发现由于有关方法调用和过度使用反射的评论,这种方法是一个坏主意。相反,我使用类型开关来检查单个接口,因为类型开关不支持 fallthrough,而大的 if.. if.. if.. 带有类型断言以便能够进行适当的调用。
噜噜哒
相关分类