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