有没有一种方法可以动态地将案例添加到golang类型开关?

时间:2019-07-05 23:09:40

标签: go reflection type-switch

我有一个简单的类型开关,我需要根据其接收的类型执行操作。但是我想添加要根据某种类型动态运行的方法。

我有一个称为“注册”的方法,在该方法中,我注册了要对特定反射执行的函数。类型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的东西?

0 个答案:

没有答案