Я пытаюсь вызвать функцию, используя отражение на основе ее имени.
Сначала я восстановил функцию с помощью
f := reflect.ValueOf(s).MethodByName(name)
Я выполняю контроль ошибок в имени функции, проверяя, является ли "f" действительным с
if !f.IsValid() {
return errors.New("There is no function with that name")
}
И, наконец, я выполняю вызов с
f.Call(inputs)
Моя проблема заключается в том, что входные данные зависят от пользователя, и иногда они могут содержать слишком много параметров, слишком мало или недопустимые типы.
IE:
2019/01/04 16:47:54 http: panic serving [::1]:53662: reflect: Call using string as type int
Как я могу контролировать, что входы действительны перед выполнением вызова?
Может быть, в моем методе есть способ восстановить ожидаемые данные и сравнить их с предоставленными?