Maison > développement back-end > Golang > Comment comparer des fonctions dans Go si les opérateurs de comparaison standard ne fonctionnent pas ?

Comment comparer des fonctions dans Go si les opérateurs de comparaison standard ne fonctionnent pas ?

Mary-Kate Olsen
Libérer: 2024-10-31 07:27:01
original
457 Les gens l'ont consulté

How can you compare functions in Go if standard comparison operators don't work?

Comparaison de fonctions dans Go

Dans Go, comparer deux valeurs de fonction à l'aide d'opérateurs de comparaison standard n'est pas réalisable. Cependant, il existe des méthodes alternatives pour vérifier si les fonctions sont équivalentes.

Utilisation des adresses de fonction

Les valeurs des fonctions elles-mêmes ne sont pas comparables. Au lieu de cela, vous pouvez comparer les adresses des valeurs de fonction pour déterminer si elles font référence à la même fonction. Pour obtenir l'adresse de la fonction, vous pouvez utiliser la fonction Sprintf("%v") du package fmt :

<code class="go">hand := &Handler{Undefined, Defined}
p1 := fmt.Sprintf("%v", Undefined)
p2 := fmt.Sprintf("%v", hand.Get)

if p1 == p2 {
    // Undefined and hand.Get refer to the same function.
}</code>
Copier après la connexion

Utiliser Reflect.Value

Une autre approche consiste à utilisez le type reflex.Value pour obtenir le pointeur de fonction sous-jacent. C'est précisément ce que fait le package fmt en interne :

<code class="go">value := reflect.ValueOf(Undefined)
ptr := value.Pointer()</code>
Copier après la connexion

Vous pouvez ensuite comparer les valeurs ptr pour déterminer si les fonctions sont égales.

Attention

Cependant, il est important de noter que la comparaison des adresses de fonctions n'est pas une méthode fiable pour tous les scénarios. Les fermetures de fonctions et les fonctions générées dynamiquement peuvent avoir des adresses différentes même si elles effectuent la même tâche.

Par conséquent, il est généralement recommandé d'éviter de comparer les adresses de fonctions et d'envisager plutôt des approches alternatives pour comparer le comportement des fonctions, telles que tester leur entrée et valeurs de sortie.

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