Maison  >  Article  >  développement back-end  >  Pourquoi la réflexion du Golang est-elle lente ?

Pourquoi la réflexion du Golang est-elle lente ?

angryTom
angryTomoriginal
2020-03-17 11:50:203623parcourir

Pourquoi la réflexion du Golang est-elle lente ?

Pourquoi la réflexion de Golang est lente

La réflexion de Golang est très lente Ceci est lié à la conception de son API. En Java, nous utilisons généralement la réflexion de cette manière.

Field field = clazz.getField("hello"); 
field.get(obj1); 
field.get(obj2);

Le type d'objet de réflexion obtenu est java.lang.reflect.Field. Il peut être réutilisé. Tant que différents obj sont transmis, le champ correspondant sur cet obj peut être obtenu.

Mais la réflexion de Golang n'est pas conçue comme ça : (Apprentissage recommandé : Tutoriel vidéo jquery)

type_ := reflect.TypeOf(obj) 
field, _ := type_.FieldByName("hello")

L'objet champ extrait ici est de type réflexion.StructField, mais il n'y a aucun moyen d'obtenir la valeur sur l'objet correspondant. Si vous souhaitez obtenir une valeur, vous devez utiliser un autre ensemble de réflexion pour l'objet au lieu de type

type_ := reflect.ValueOf(obj) 
fieldValue := type_.FieldByName("hello")

Le type fieldValue extrait ici est Reflect.Value, qui est une valeur spécifique, pas une valeur réutilisable Réflexion objet, chaque réflexion nécessite la structure malloc reflex.Value et implique également GC.

Résumé

Il y a deux raisons principales pour lesquelles la réflexion de Golang est lente

1 Cela implique l'allocation de mémoire et le GC ultérieur. ;

3. Il y a beaucoup d'énumérations dans l'implémentation de Reflect, c'est-à-dire des boucles for, telles que des types.

Pour plus de connaissances sur Golang, veuillez faire attention à la colonne Tutoriel Golang sur le site Web PHP chinois.

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