Maison  >  Article  >  développement back-end  >  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
Mary-Kate Olsenoriginal
2024-10-31 07:27:01377parcourir

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>

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>

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!

Déclaration:
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