Есть ли способ динамически добавлять дела в переключатель типа golang? - PullRequest
2 голосов
/ 06 июля 2019

У меня есть переключатель простого типа, который мне нужен для выполнения операций в соответствии с типом, который он получает. Но я хочу добавить методы, которые будут запускаться в соответствии с определенным типом динамически.

У меня есть этот метод под названием «Register», в котором я регистрирую функцию, которая должна быть выполнена для определенного отражения. Тип 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 из пакета отражения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...