Heim > Backend-Entwicklung > Golang > Wie kann ich in Go Funktionen mit unterschiedlichen Signaturen zuordnen?

Wie kann ich in Go Funktionen mit unterschiedlichen Signaturen zuordnen?

Mary-Kate Olsen
Freigeben: 2024-12-10 22:15:14
Original
862 Leute haben es durchsucht

How Can I Map Functions with Different Signatures in Go?

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")
    }
}
Nach dem Login kopieren

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)
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage