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

Comment puis-je utiliser la réflexion Go pour sélectionner des fonctions en fonction de leurs types d'entrée et de sortie ?

Linda Hamilton
Libérer: 2024-10-29 03:36:30
original
711 Les gens l'ont consulté

How can I use Go reflection to select functions based on their input and output types?

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

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!

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!