Ich möchte eine Funktion basierend auf einer Zeichenfolge angeben. Ich bekomme Strings aus einer Map, in dem Beispiel unten sind es die Werte in function
während man mit der Map interagiert. Wenn nun beispielsweise der String-Wert function
== "networkInfo" verwendet wird, möchte ich diesen Wert als Namen einer echten Funktion "behandeln". Es ist schwer zu erklären, aber ich denke ihr wisst was ich meine.Konvertieren Zeichenfolge Wert Funktionsaufruf
Mein Ziel ist es, die switch-Anweisung zu entfernen und c.AddFunc(spec, func() { networkInfo() })
direkt aufrufen wo NetworkInfo der Funktionsname ist, extrahiert aus Zeichenfolge function
. Ich weiß, das ist möglich, aber ich weiß nicht, wie :(Hilfe geschätzt wird
// 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"))
}
Ich nehme an, alle Funktionen haben die gleiche Signatur? d. h. 'func()' –
Funktionieren auch alle Funcs im gleichen Paket? –
Ja, alle Funktionen (alle "Aufgaben") haben die gleiche Signatur. Und alle Funktionen leben im selben Paket. –