Wie filtere ich Go-Funktionen basierend auf Parametern und Rückgabetypen mithilfe von Reflection?

Mary-Kate Olsen
Freigeben: 2024-10-29 00:15:02
Original
204 Leute haben es durchsucht

How to Filter Go Functions Based on Parameters and Return Types Using Reflection?

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

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!