Sélection de fonctions par type dans Go
Considérez un scénario dans lequel vous disposez d'un tableau ou d'une tranche de fonctions de différents types. Pour traiter ces fonctions efficacement, vous souhaiterez peut-être sélectionner uniquement celles qui renvoient ou reçoivent des types de données spécifiques, tels que des nombres entiers. Ceci peut être réalisé à l'aide du package de réflexion Go.
Le package de réflexion fournit les moyens d'introspecter le type d'une valeur au moment de l'exécution. En inspectant les types d'entrée et de sortie d'une fonction, vous pouvez filtrer ceux qui répondent à vos critères.
Considérez l'exemple de programme suivant :
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) // I use interface{} to allow any kind of func funcs[0] = func(a int) int { return a + 1 } // good funcs[1] = func(a string) int { return len(a) } // good funcs[2] = func(a string) string { return ":(" } // bad for _, fi := range funcs { f := reflect.ValueOf(fi) functype := f.Type() good := false for i := 0; i < functype.NumIn(); i++ { if "int" == functype.In(i).String() { good = true // yes, there is an int among inputs break } } for i := 0; i < functype.NumOut(); i++ { if "int" == functype.Out(i).String() { good = true // yes, there is an int among outputs break } } if good { fmt.Println(f) } } }</code>
Dans ce programme, nous créons un tranche de fonctions ([]interface{}) pour stocker des fonctions de différents types. Nous parcourons ensuite cette tranche et pour chaque fonction, nous utilisons la réflexion pour obtenir son type (reflect.ValueOf(fi).Type()). En inspectant les types d'entrée et de sortie, nous pouvons déterminer si la fonction répond à nos critères. Dans ce cas, nous vérifions les fonctions qui reçoivent ou renvoient des entiers. Si une telle fonction est trouvée, elle est imprimée sur la sortie.
Le package de réflexion fournit un mécanisme puissant pour introspecter les valeurs Go, y compris les fonctions. En tirant parti de cette fonctionnalité, vous pouvez filtrer les fonctions en fonction de leurs types au moment de l'exécution, permettant ainsi des opérations de code efficaces et flexibles.
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!