Heim > Artikel > Backend-Entwicklung > Mehrere Funktionstypen im Mapping, Golang
Map ist eine leistungsstarke Datenstruktur in Golang, die es uns ermöglicht, einen Wert einem anderen Wert zuzuordnen. In Golang können wir Zuordnungen verwenden, um verschiedene Arten von Funktionen zu implementieren. Der PHP-Editor Youzi stellt in diesem Artikel verschiedene Funktionstypen im Mapping vor, darunter gewöhnliche Funktionen, anonyme Funktionen und Methoden. Darüber hinaus untersuchen wir, wie Funktionen als Werte in Zuordnungen verwendet werden, und demonstrieren ihre Leistungsfähigkeit und Flexibilität. Unabhängig davon, ob Sie Anfänger oder erfahrener Golang-Entwickler sind, bietet Ihnen dieser Artikel nützliches Wissen und Beispiele, die Ihnen helfen, Funktionstypen in Zuordnungen besser zu verstehen und anzuwenden. Beginnen wir mit der Erkundung!
Ich möchte Benutzereingaben mit einer Funktion verbinden. Die Benutzereingabe ist eine Zeichenfolge. Zum Beispiel,
"func_name=MyPrintf&s1=你好,世界!"
oder
"func_name=MyAdd&i1=1&i2=2"
Der Code jeder Funktion lautet:
func MyPrintf(s1 string) { fmt.Println(s1) } func MyAdd(i1, i2 int) { fmt.Println(i1, i2) }
Ich hätte gerne eine Karte wie die untenstehende,
type Myfunc func(string) | func(int, int) // <- Of course, it's wrong code, just I hope like this. myMap := make(map[string]Myfunc) myMap["MyPrintf"] = MyPrintf myMap["MyAdd"] = MyAdd
myMap kann Funktionen über die vom Benutzer eingegebene Zeichenfolge func_name aufrufen.
myMap[func_name](s1)
Ausgabe: Hallo Welt!
myMap[func_name](i1, i2)
Ausgabe: 3
Ist das möglich? Vielleicht denke ich, dass die Verwendung von „eval“ möglich ist, aber ich habe gehört, dass die Verwendung von „eval“ schlecht ist. Also dachte ich darüber nach, Funktionszeiger zu verwenden, aber in Golang gibt es keine Funktionszeiger.
Ich habe einige allgemeine Golang-Programmierung ausprobiert,
type Myfunc interface { func(string) | func(int, int) } myMap := make(map[string]Myfunc)
Ausgabe: Fehler aufgetreten: Typ Myfunc kann nicht außerhalb von Typeinschränkungen verwendet werden: Schnittstelle enthält Typeinschränkungen
Versuchen Sie es noch einmal,
myMap := make(map[string]interface{}) myMap["MyPrintf"] = interface{}(MyPrintf) myMap["MyPrintf"].(func(string))("Hello, world!")
Ausgabe: Hallo Welt!
myMap["MyAdd"] = interface{}(MyAdd) myMap["MyAdd"].(func(int,int))(1, 2)
Ausgabe: 3
Es funktioniert, aber Sie müssen den richtigen Funktionstyp angeben, was nicht sehr komfortabel ist. Ich denke, dieser Weg ist für mein Szenario nicht geeignet. Bitte gebt mir Hilfe. Es tut mir leid für meine schlechte englische Schreibweise.
Sie können Folgendes versuchen:
Ich muss sagen, dass dies keine gute Vorgehensweise ist, da Panikfehler aufgrund falscher Typen nicht überprüft werden. Ich werde einen anderen Ansatz in Betracht ziehen.
package main import "fmt" type GeneralFunc func(args ...interface{}) func main() { // Create a map of functions with the type GeneralFunc functionsMap := map[string]GeneralFunc{ "MyPrintf": func(args ...interface{}) { fmt.Println(args[0].(string)) }, "MyAdd": func(args ...interface{}) { fmt.Println(args[0].(int), args[1].(int)) }, } // Use the functions from the map functionsMap["MyPrintf"]("Hello World") functionsMap["MyAdd"](2, 3) }
Das obige ist der detaillierte Inhalt vonMehrere Funktionstypen im Mapping, Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!