Maison >développement back-end >Golang >Comment les assertions de type et les commutateurs de type de Go fonctionnent-ils par rapport aux autres méthodes de vérification de type ?

Comment les assertions de type et les commutateurs de type de Go fonctionnent-ils par rapport aux autres méthodes de vérification de type ?

DDD
DDDoriginal
2024-12-14 08:33:12820parcourir

How Do Go's Type Assertions and Type Switches Perform Compared to Other Type Checking Methods?

Assertions de type et commutateurs de type dans Go : considérations sur les performances

Dans Go, les assertions de type et les commutateurs de type fournissent des mécanismes de découverte de type à l'exécution. Cependant, des inquiétudes ont été soulevées quant à leurs performances par rapport à des méthodes telles que les comparaisons de membres de type en C/C.

Pour évaluer leur impact, un test de référence a été réalisé pour comparer la vitesse de ces méthodes :

package main

import (
    "testing"
)

type myint int64

type Inccer interface {
    inc()
}

func (i *myint) inc() {
    *i = *i + 1
}

func BenchmarkIntmethod(b *testing.B) {
    i := new(myint)
    incnIntmethod(i, b.N)
}

func BenchmarkInterface(b *testing.B) {
    i := new(myint)
    incnInterface(i, b.N)
}

func BenchmarkTypeSwitch(b *testing.B) {
    i := new(myint)
    incnSwitch(i, b.N)
}

func BenchmarkTypeAssertion(b *testing.B) {
    i := new(myint)
    incnAssertion(i, b.N)
}

// Remaining helper functions...

Les résultats sur une machine AMD R7 2700X (Go v1.12.9) montrent que toutes les méthodes ont des performances similaires :

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

Dans contrairement aux résultats précédents de 2015 sur une machine amd64, aucun ralentissement significatif n'est observé lors de l'utilisation de commutateurs ou d'assertions de type par rapport aux appels de méthode directs ou à l'accès à l'interface.

Dans l'ensemble, les performances des assertions de type et des commutateurs se sont considérablement améliorées. dans Go et est désormais comparable à d’autres méthodologies de vérification de type. Par conséquent, vous pouvez les utiliser dans votre code sans vous soucier de pénalités de performances substantielles.

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