Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist die Golang-Reflexion langsam?

Warum ist die Golang-Reflexion langsam?

angryTom
angryTomOriginal
2020-03-17 11:50:203555Durchsuche

Warum ist die Golang-Reflexion langsam?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn