Mapping-Funktionen in Go
In Go bieten Karten eine leistungsstarke Möglichkeit, Schlüssel ihren jeweiligen Werten zuzuordnen. Um Funktionen zuzuordnen, ist der Schlüssel normalerweise eine Zeichenfolge, die den Namen oder Bezeichner der Funktion darstellt, während der Wert eine Funktionsreferenz ist.
Beispiel:
Bedenken Sie Folgendes Go-Programm:
func a(param string) { fmt.Println("parameter:", param) } m := map[string]func(string) { "a": a, } for key, value := range m { if key == "a" { value("hello") } }
In diesem Beispiel wird eine Karte m verwendet, um eine Zuordnung zwischen dem Zeichenfolgenschlüssel „a“ und der Funktionsreferenz a zu speichern. Die Schleife durchläuft die Karte und führt die mit der Taste „a“ verknüpfte Funktion aus, wobei sie die Zeichenfolge „hello“ als Argument übergibt.
Umgang mit verschiedenen Funktionssignaturen:
Bei Ihrem ersten Versuch ist jedoch ein Problem aufgetreten, als Sie versuchten, Funktionen mit unterschiedlichen Signaturen in der Karte zu speichern. Dies liegt daran, dass der Werttyp in der Karte als func() deklariert ist. Um Funktionen mit unterschiedlichen Signaturen zu verarbeiten, können wir eine Schnittstelle als Werttyp verwenden, wie z. B. die im folgenden überarbeiteten Beispiel verwendete Schnittstelle{}:
func f(p string) {} func g(p string, q int) {} m := map[string]interface{}{ "f": f, "g": g, } for k, v := range m { switch k { case "f": v.(func(string))("astring") // Explicit cast to type func(string) case "g": v.(func(string, int))("astring", 42) // Explicit cast to type func(string, int) } }
Durch die Verwendung des Typs Schnittstelle{} ermöglichen wir die Map zum Speichern von Werten jeglicher Art, einschließlich Funktionen mit unterschiedlichen Signaturen. Anschließend verwenden wir eine explizite Typumwandlung innerhalb der Schleife, um die Funktionen mit ihren jeweiligen Parametern auszuführen.
Das obige ist der detaillierte Inhalt vonWie kann ich in Go Funktionen mit unterschiedlichen Signaturen zuordnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!