首页 > 解决方案 > 有没有办法将案例动态添加到 golang 类型开关?

问题描述

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

我有一个名为“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反射包的东西?

标签: goreflectiontype-switch

解决方案


推荐阅读