Filtern von Funktionen nach Parametern und Rückgabetypen in Go
Stellen Sie sich ein Szenario vor, in dem Sie über eine Sammlung von Funktionen verfügen und diese selektiv auswählen müssen bestimmte Kriterien erfüllen, z. B. die Rückgabe einer Ganzzahl oder die Verwendung einer Ganzzahl als Eingabeparameter. Diese Aufgabe kann durch die Verwendung von Reflection in Golang erfüllt werden.
Das Reflect-Paket bietet Zugriff auf die zugrunde liegenden Metadaten von Typen und Werten in Go. Durch die Verwendung von „reflect.ValueOf“ und „reflect.Type“ können wir die Funktionstypen untersuchen und Informationen über ihre Parameter und Rückgabewerte abrufen.
Um Funktionen auszuwählen, die eine Ganzzahl zurückgeben, durchlaufen wir jede Funktion in der Liste und verwenden sie reflektieren.ValueOf, um seinen Wert zu erhalten. Anschließend rufen wir den Typ der Funktion mit „reflect.Type“ ab und untersuchen ihre Rückgabewerte mit „NumOut“ und „Out“. Wenn der Typ eines Rückgabewerts „int“ ist, markieren wir die Funktion zur Aufnahme als „gut“.
Um Funktionen auszuwählen, die eine Ganzzahl als Parameter akzeptieren, iterieren wir in ähnlicher Weise durch die NumIn-Parameter und der Funktion Überprüfen Sie den Typ jeder Eingabe mit „reflect.In“. Wenn „int“ unter den Eingabetypen gefunden wird, markieren wir die Funktion als „gut“.
Hier ist ein Beispielprogramm, das die Verwendung dieses Ansatzes demonstriert:
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) funcs[0] = func(a int) int { return a + 1 } funcs[1] = func(a string) int { return len(a) } funcs[2] = func(a string) string { return ":(" } for _, fi := range funcs { f := reflect.ValueOf(fi) functype := f.Type() good := false for i := 0; i < functype.NumIn(); i++ { if functype.In(i).String() == "int" { good = true break } } for i := 0; i < functype.NumOut(); i++ { if functype.Out(i).String() == "int" { good = true break } } if good { fmt.Println(f) } } } ```` </code>
Das obige ist der detaillierte Inhalt vonWie filtere ich Go-Funktionen basierend auf Parametern und Rückgabetypen mithilfe von Reflection?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!