Golang のリフレクションが遅いのはなぜですか?

angryTom
リリース: 2020-03-17 11:50:20
オリジナル
3613 人が閲覧しました

Golang のリフレクションが遅いのはなぜですか?

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!