In Go sind Karten vielseitige Datenstrukturen, die Schlüssel-Wert-Paare speichern können. Manchmal ist es nützlich, Funktionen in einer Karte zu speichern, um einen dynamischen Aufruf basierend auf einer Taste zu ermöglichen.
Problem:
Angenommen, Sie haben mehrere Funktionen und möchten diese erstellen eine Karte, bei der der Schlüssel der Funktionsname und der Wert die Funktion selbst ist. Wenn Sie dies jedoch wie unten gezeigt versuchen, tritt ein Fehler auf:
func a(param string) {} m := map[string]func{} 'a_func': a, } for key, value := range m { if key == 'a_func' { value(param) } }
Lösung:
Das Problem entsteht durch die Syntax zum Definieren einer typspezifischen Karte ist falsch. Um dieses Problem zu beheben, können Sie stattdessen die Syntax „map[string]interface{}“ verwenden, da für die Werte keine Typsicherheit erzwungen wird. Das folgende modifizierte Beispiel veranschaulicht, wie Funktionen aus der Karte gespeichert und aufgerufen werden:
package main import "fmt" func f(p string) { fmt.Println("function f parameter:", p) } func g(p string, q int) { fmt.Println("function g parameters:", p, q) } func main() { m := map[string]interface{}{ "f": f, "g": g, } for k, v := range m { switch k { case "f": v.(func(string))("astring") case "g": v.(func(string, int))("astring", 42) } } }
In diesem Beispiel speichert die Karte m zwei Funktionswerte als Schnittstelle{}. Beim Aufrufen der Funktionen basierend auf dem Schlüssel wird eine Typzusicherung durchgeführt, um den Schnittstellenwert in den richtigen Funktionstyp umzuwandeln.
Das obige ist der detaillierte Inhalt vonWie kann ich Funktionen mithilfe von Maps in Go dynamisch speichern und aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!