Я хочу указать функцию на основе строки. Я получаю строки из карты, в приведенном ниже примере это значения в function
во время взаимодействия с картой. Например, когда значение строки function
== «networkInfo», я хотел бы «обработать» это значение как имя реальных функций. Трудно объяснить, но я думаю, вы, ребята, поймете, что я имею в виду.Преобразование строкового значения в вызов функции
Моя цель - удалить оператор switch и напрямую вызвать c.AddFunc(spec, func() { networkInfo() })
где networkInfo - это имя функции, извлеченное из строки function
. Я знаю, что это возможно, но я не знаю, как :(Помощь ценится
// ScheduleCronjobs starts the scheduler
func ScheduleCronjobs() {
tasks := props.P.GetStringMapString("tasks")
log.Infof("number of tasks: %d", len(tasks))
if len(tasks) != 0 {
c := cron.New()
// for each task, initialize
for function, spec := range tasks {
switch function {
case "networkInfo":
c.AddFunc(spec, func() { networkInfo() })
case "bla":
c.AddFunc(spec, func() { bla() })
default:
log.Errorf("unknown task: %q", function)
}
}
c.Start()
}
// after initialization, send out confirmation message
slack.SendMessage("tasks initialized", props.P.GetString("channel"))
}
Я предполагаю, что все funcs имеют одинаковую подпись? то есть 'func()' –
Кроме того, выполняются ли все функции в одном пакете? –
Да, все функции (все «задачи») имеют одну и ту же подпись. И все функции живут в одном пакете. –