我有一个简单的类型开关,我需要根据它接收到的类型执行操作。但是我想添加方法以动态地根据某种类型运行。
我有一个名为“Register”的方法,在该方法中我注册了一个要为某个 reflect.Type 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 中,因此将为它各自的类型执行正确的方法,我不知道这是否可能在 go 中。我尝试在反射包中寻找它,但唯一的选项似乎做了类似于选择操作的事情。好吧,由于我不在这里处理频道,我真的只需要动态地将案例添加到我的交换机。
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
反射包的东西?