Warum die Golang-Reflexion langsam ist
Golangs Reflexion ist sehr langsam. Dies hängt mit seinem API-Design zusammen. In Java verwenden wir Reflektion im Allgemeinen auf diese Weise.
Field field = clazz.getField("hello"); field.get(obj1); field.get(obj2);
Der Typ des erhaltenen Reflexionsobjekts ist java.lang.reflect.Field. Es kann wiederverwendet werden. Solange ein anderes Objekt übergeben wird, kann das entsprechende Feld für dieses Objekt abgerufen werden.
Aber Golangs Reflexion ist nicht so gestaltet: (Empfohlenes Lernen: jquery-Video-Tutorial)
type_ := reflect.TypeOf(obj) field, _ := type_.FieldByName("hello")
Das hier herausgenommene Feldobjekt ist vom Typ „reflect.StructField“, aber Es gibt keine Möglichkeit, den Wert für das entsprechende Objekt abzurufen. Wenn Sie einen Wert erhalten möchten, müssen Sie anstelle des Typs einen anderen Satz von Reflexionen für das Objekt verwenden
type_ := reflect.ValueOf(obj) fieldValue := type_.FieldByName("hello")
Der hier herausgenommene Feldwerttyp ist „Reflect.Value“, bei dem es sich um einen bestimmten Wert und nicht um eine wiederverwendbare Reflexion handelt Für jedes Objekt ist die Malloc-Reflect.Value-Struktur erforderlich, und es ist auch GC erforderlich.
Zusammenfassung
Es gibt zwei Hauptgründe, warum Golang Reflect langsam ist
1 Es beinhaltet die Speicherzuweisung und die anschließende GC ;
3. Es gibt viele Aufzählungen in der Reflect-Implementierung, also for-Schleifen, wie zum Beispiel Typen.
Weitere Golang-Kenntnisse finden Sie in der Spalte Golang-Tutorial auf der chinesischen PHP-Website.
Das obige ist der detaillierte Inhalt vonWarum ist die Golang-Reflexion langsam?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!