Maison > Article > développement back-end > Comment puis-je sélectionner par programme des fonctions dans Go en fonction de leurs types de retour ou de paramètres à l'aide du package Reflect ?
Sélection de fonctions basées sur des types de retour ou de paramètres dans Go
Dans Go, il est possible de sélectionner par programme des fonctions en fonction de leur retour ou de leur paramètre genres. Cela peut être utile lorsque vous disposez d'une collection de fonctions et que vous devez filtrer uniquement celles qui répondent à certains critères.
La bibliothèque standard Go fournit le package Reflect, qui vous permet de manipuler et d'inspecter les types. Pour sélectionner des fonctions en fonction de leurs types, vous pouvez suivre les étapes suivantes :
Voici un exemple qui montre comment sélectionner des fonctions qui prennent un int comme int paramètre ou renvoie un int :
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) // Using interface{} to allow any kind of function funcs[0] = func(a int) int { return a + 1 } // Good: takes int, returns int funcs[1] = func(a string) int { return len(a) } // Good: returns int funcs[2] = func(a string) string { return ":(" } // Bad: returns string 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 // Yes, there is an int input break } } for i := 0; i < functype.NumOut(); i++ { if functype.Out(i).String() == "int" { good = true // Yes, there is an int output break } } if good { fmt.Println(f) } } }</code>
Ce code présente l'utilisation de Reflect pour inspecter les types de fonctions et filtrer les fonctions qui répondent aux critères souhaités. Il montre comment sélectionner des fonctions qui prennent des entiers comme entrées ou renvoient des entiers comme sorties.
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!