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!