Golang のリフレクションが遅い理由
Golang のリフレクションは非常に遅いですが、これはその API 設計に関連しています。 Java では通常、この方法でリフレクションを使用します。
Field field = clazz.getField("hello"); field.get(obj1); field.get(obj2);
取得したリフレクションオブジェクトの型はjava.lang.reflect.Fieldです。再利用可能です。異なる obj が渡される限り、この obj の対応するフィールドを取得できます。
しかし、Golang のリフレクションは次のように設計されていません: (推奨される学習: jquery ビデオ チュートリアル )
type_ := reflect.TypeOf(obj) field, _ := type_.FieldByName("hello")
ここで取り出されたフィールド オブジェクトは、reflect.StructField 型ですが、対応するオブジェクトの値を取得する方法はありません。値を取得したい場合は、タイプの代わりにオブジェクトの別のリフレクションのセットを使用する必要があります。
type_ := reflect.ValueOf(obj) fieldValue := type_.FieldByName("hello")
ここで取り出される fieldValue タイプは、reflect.Value です。これは、再利用可能な値ではなく、特定の値です。オブジェクトの場合、各リフレクションには malloc のreflect.Value 構造体が必要で、GC も必要となります。
概要
Golang のリフレクトが遅い理由は主に 2 つあります
1. メモリ割り当てとその後の GC が関係します。 ;
3. リフレクト実装、つまり for ループには、型などの多数の列挙型があります。
golang の詳細については、PHP 中国語 Web サイトの golang チュートリアル 列に注目してください。
以上がGolang のリフレクションが遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。