我有一个简单的类型开关,我需要根据其接收的类型执行操作。但是我想添加要根据某种类型动态运行的方法。
我有一个称为“注册”的方法,在该方法中,我注册了要对特定反射执行的函数。类型T。这些转换将存储在键为实际类型的映射中。
/*Register ...*/
func (bs *BaseStreamer) Register(
transform func (in interface{}) interface{},
T reflect.Type) {
_, ok := bs.transformations[T]
if ok {
log.Printf(
"Warning: Overriding method for type %s",
T.String()
)
}
bs.transformations[T] = transform
}
现在,我想遍历此映射并将动态添加案例到我的TypeSwitch中,因此将针对其各自的类型执行正确的方法,而且我不知道这样做是否可行。我尝试在reflect包中寻找它,但是唯一的选择似乎与select操作类似。好吧,由于我不在这里处理频道,所以我实际上只需要向交换机动态添加案例。
switch item := newItem.(type) {
// Here I'd like to iterate over my map
// and add cases for each pair key, value
// (type, function) i have on my map
default:
log.Printf("No transformation function registered for any of the types")
}
这甚至可能吗?反射包中是否有类似于SelectCase
的东西?