Sélection de fonctions dans une liste dans Go
Dans Go, il est possible de créer des listes de fonctions à l'aide de tranches ou de tableaux. Cependant, la sélection de fonctions en fonction de critères spécifiques, tels que le type de retour ou les types de paramètres, nécessite l'utilisation de la réflexion.
Pour déterminer si une fonction prend des arguments entiers ou renvoie un entier, nous pouvons utiliser le package Reflect pour examiner sa signature de type. Voici un exemple de code qui montre comment y parvenir :
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) // Use interface{} for any function type funcs[0] = func(a int) int { return a + 1 } // Accepts an int, returns an int funcs[1] = func(a string) int { return len(a) } // Accepts a string, returns an int funcs[2] = func(a string) string { return ":(" } // Accepts a string, returns a string for _, fi := range funcs { f := reflect.ValueOf(fi) functype := f.Type() hasIntParam := false hasIntReturn := false // Check function parameters for int type for i := 0; i < functype.NumIn(); i++ { if "int" == functype.In(i).String() { hasIntParam = true break } } // Check function return value for int type for i := 0; i < functype.NumOut(); i++ { if "int" == functype.Out(i).String() { hasIntReturn = true break } } // Print the function if it has integer parameter or return type if hasIntParam || hasIntReturn { fmt.Println(f) } } }</code>
En utilisant la réflexion, nous pouvons introspecter les fonctions de la liste et imprimer sélectivement celles qui répondent aux critères spécifiés. Le code est explicite et fournit une démonstration claire de la façon de gérer ce problème dans Go.
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!