Maison >développement back-end >Golang >Comment puis-je comparer de manière fiable les pointeurs de fonction pour l'égalité en Go ?
Traditionnellement, comparer deux pointeurs de fonction non nuls dans Go impliquait l'utilisation d'opérateurs == ou !=. Cependant, suite à des changements récents, cette approche entraîne désormais des erreurs.
L'élimination de la comparaison d'égalité de pointeur pour les fonctions découle du concept d'égalité par rapport à l'identité. Dans Go, les opérateurs == et != évaluent l'équivalence des valeurs, pas l'identité. Cette distinction vise à éviter toute confusion entre ces concepts.
De plus, les comparaisons de fonctions ont un impact sur les performances. Par exemple, les fermetures anonymes qui ne font pas référence à des variables externes doivent être optimisées en une seule implémentation par le compilateur. La comparaison des pointeurs de fonction entraverait cette optimisation, nécessitant la création dynamique de nouvelles fermetures au moment de l'exécution.
Bien qu'il soit possible de déterminer l'identité d'une fonction à l'aide du package Reflect, il est important de noter que cette approche implique un comportement indéfini. Les résultats de telles comparaisons ne sont pas fiables, car le compilateur peut décider de regrouper plusieurs fonctions en une seule implémentation.
Pour comparer efficacement les pointeurs de fonction, l'approche suivante peut être utilisée :
package main import "fmt" func F1() {} func F2() {} var F1_ID = F1 // Assign a unique variable to F1 var F2_ID = F2 // Assign a unique variable to F2 func main() { f1 := &F1_ID // Take the address of F1_ID f2 := &F2_ID // Take the address of F2_ID // Compare pointers fmt.Println(f1 == f1) // Prints true fmt.Println(f1 == f2) // Prints false }
En employant des pointeurs vers des variables uniques associées à chaque fonction, vous pouvez détecter efficacement l'égalité des pointeurs entre les fonctions.
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!