Heim  >  Artikel  >  Backend-Entwicklung  >  Mehrere Funktionstypen im Mapping, Golang

Mehrere Funktionstypen im Mapping, Golang

WBOY
WBOYnach vorne
2024-02-12 08:39:09858Durchsuche

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!

Frageninhalt

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.

Lösung

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Filterabfrage mongodb GolangNächster Artikel:Filterabfrage mongodb Golang