Maison > développement back-end > Golang > le corps du texte

Comment filtrer les fonctions Go en fonction des paramètres et des types de retour à l'aide de Reflection ?

Mary-Kate Olsen
Libérer: 2024-10-29 00:15:02
original
204 Les gens l'ont consulté

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

Filtrage des fonctions par paramètres et types de retour dans Go

Considérez un scénario dans lequel vous disposez d'une collection de fonctions et devez choisir de manière sélective celles qui répondre à des critères spécifiques, tels que renvoyer un entier ou prendre un entier comme paramètre d'entrée. Cette tâche peut être accomplie grâce à l'utilisation de la réflexion dans Golang.

Le package Reflect donne accès aux métadonnées sous-jacentes des types et des valeurs dans Go. En utilisant Reflect.ValueOf et Reflect.Type, nous pouvons inspecter les types de fonctions et récupérer des informations sur leurs paramètres et renvoyer les valeurs.

Pour sélectionner les fonctions qui renvoient un entier, nous parcourons chaque fonction de la liste et utilisons Reflect.ValueOf pour obtenir sa valeur. Nous récupérons ensuite le type de la fonction à l'aide de Reflect.Type et examinons ses valeurs de retour à l'aide de NumOut et Out. Si le type d'une valeur de retour est "int", nous marquons la fonction comme "bonne" pour l'inclusion.

De même, pour sélectionner des fonctions qui prennent un entier comme paramètre, nous parcourons les paramètres NumIn de la fonction et vérifiez le type de chaque entrée à l’aide de Reflect.In. Si "int" est trouvé parmi les types d'entrée, nous marquons la fonction comme "bonne".

Voici un exemple de programme qui montre comment utiliser cette approche :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!