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>
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!