Dans Go, les valeurs des fonctions ne sont pas comparables. Cependant, il est possible de comparer les adresses des valeurs de fonction, ce qui peut être utile dans certains scénarios.
Selon la spécification Go, « Les valeurs de fonction ne sont pas comparables. " Cela signifie que vous ne pouvez pas comparer directement deux valeurs de fonction à l'aide d'opérateurs de comparaison tels que == ou !=.
Pour comparer les adresses de valeur de fonction, vous pouvez utiliser le fmt Fonction .Sprintf() pour obtenir l’adresse de la fonction. Les variables p1 et p2 dans le code ci-dessous contiennent respectivement les adresses des fonctions Undefined et hand.Get.
<code class="go">p1 := fmt.Sprintf("%v", Undefined) p2 := fmt.Sprintf("%v", hand.Get)</code>
Vous pouvez ensuite utiliser l'opérateur == pour comparer les adresses de valeur de fonction :
<code class="go">fmt.Println("Expecting true:", p1 == p2)</code>
Bien qu'il soit techniquement possible de comparer les adresses de valeurs de fonction, ce n'est généralement pas une bonne pratique. Les valeurs des fonctions peuvent changer au cours de la durée de vie d'un programme, ce qui peut rendre les comparaisons d'adresses peu fiables.
Au lieu de comparer les adresses des valeurs de fonction, il est préférable de refactoriser votre code pour éviter d'avoir à effectuer de telles comparaisons. Par exemple, vous pouvez créer une carte des valeurs de fonction et comparer les clés pour déterminer quelle fonction est utilisée.
Une autre option pour comparer les valeurs de fonction consiste à utiliser la réflexion. La méthode Reflect.Value.Pointer() permet d'obtenir l'adresse d'une valeur de fonction. Cependant, cette approche n'est pas non plus recommandée car elle est plus complexe et plus sujette aux erreurs que la technique de comparaison d'adresses décrite ci-dessus.
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!