Maison >développement back-end >Golang >Les assertions de type et les commutateurs de type de Go sont-ils lents ?

Les assertions de type et les commutateurs de type de Go sont-ils lents ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 09:22:08906parcourir

Are Go's Type Assertions and Type Switches Slow?

Performances de découverte de types dans Go : les assertions de type/commutateurs de types sont-elles lentes ?

Dans Go, la découverte de types au moment de l'exécution peut être réalisée via le type assertions ou commutateurs de type. Alors que l'assertion de type effectue une conversion directe, le commutateur de type se compare aux informations de type. En C/C, la découverte de types d'exécution est souvent considérée comme lente, ce qui conduit à l'utilisation de comparaisons de membres de type comme solution de contournement.

Évaluation des performances avec l'analyse comparative

Pour évaluer les performances des mécanismes de découverte de types dans Go, nous effectuons un test de référence : http://play.golang.org/p/E9H_4K2J9-. Le test compare quatre méthodes :

  • BenchmarkIntmethod : Invocation directe d'une méthode sur un type connu
  • BenchmarkInterface : Invocation d'une méthode via un interface
  • BenchmarkTypeSwitch : Utilisation d'un commutateur de type pour identifier et appeler la méthode
  • BenchmarkTypeAssertion : Utilisation d'une assertion de type pour identifier et invoquer la méthode

Benchmark Résultats

Edit : 9 octobre 2019

Des résultats récents avec Go v1.12.9 sur un AMD R7 2700X démontrent que les quatre méthodes sont à peu près égales en performances :

BenchmarkIntmethod-16           2000000000           1.67 ns/op
BenchmarkInterface-16           1000000000           2.03 ns/op
BenchmarkTypeSwitch-16          2000000000           1.70 ns/op
BenchmarkTypeAssertion-16       2000000000           1.67 ns/op

Résultats précédents : 19 janvier 2015

Sur une machine amd64, des résultats plus anciens montraient que le changement de type et l'assertion de type étaient plus lents que les appels de méthode directs ou les invocations de méthodes d'interface :

BenchmarkIntmethod  1000000000           2.71 ns/op
BenchmarkInterface  1000000000           2.98 ns/op
BenchmarkTypeSwitch 100000000           16.7 ns/op
BenchmarkTypeAssertion  100000000       13.8 ns/op

Conclusion

Sur la base de ces résultats, nous pouvons conclure que les assertions de type et les commutateurs de type dans Go n'entraînent pas de pénalité de performances significative. par rapport à d’autres méthodologies de vérification de type. Par conséquent, la sélection de l'approche la plus appropriée dépend de facteurs tels que la lisibilité du code et les préférences de maintenance.

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