ホームページ >バックエンド開発 >Golang >Go の型アサーションと型切り替えは遅いですか?

Go の型アサーションと型切り替えは遅いですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-09 09:22:08907ブラウズ

Are Go's Type Assertions and Type Switches Slow?

Go の型検出パフォーマンス: 型アサーション / 型スイッチは遅いですか?

Go では、実行時の型検出は型を通じて実現できます。アサーションまたは型スイッチ。型アサーションはダイレクト キャストを実行しますが、型スイッチは型情報と比較します。 C/C では、実行時の型検出が遅いと考えられることが多く、回避策として型メンバーの比較が使用されます。

ベンチマークによるパフォーマンスの評価

Go の型検出メカニズムのパフォーマンスを評価するために、ベンチマーク テストを実施します: http://play.golang.org/p/E9H_4K2J9-。このテストでは、次の 4 つのメソッドを比較します。

  • BenchmarkIntmethod: 既知の型でメソッドを直接呼び出す
  • BenchmarkInterface: メソッドを介してメソッドを呼び出すインターフェイス
  • BenchmarkTypeSwitch: 型スイッチを使用してメソッドを識別および呼び出します
  • BenchmarkTypeAssertion: 型アサーションを使用してメソッドを識別および呼び出します

ベンチマーク結果

編集: 2019 年 10 月 9 日

AMD R7 2700X での Go v1.12.9 の最近の結果は、4 つの方法のパフォーマンスがほぼ同等であることを示しています。 :

BenchmarkIntmethod-16           2000000000           1.67 ns/op
BenchmarkInterface-16           1000000000           2.03 ns/op
BenchmarkTypeSwitch-16          2000000000           1.70 ns/op
BenchmarkTypeAssertion-16       2000000000           1.67 ns/op

前の結果: 1 月19, 2015

amd64 マシンでは、型切り替えと型アサーションが直接メソッド呼び出しやインターフェイス メソッド呼び出しよりも遅いという古い結果が示されました。

BenchmarkIntmethod  1000000000           2.71 ns/op
BenchmarkInterface  1000000000           2.98 ns/op
BenchmarkTypeSwitch 100000000           16.7 ns/op
BenchmarkTypeAssertion  100000000       13.8 ns/op

結論

これらの結果に基づいて、型アサーションとGo の型スイッチは、他の型チェック方法と比較してパフォーマンスに重大な影響を与えません。したがって、最も適切なアプローチの選択は、コードの可読性やメンテナンスの好みなどの要因によって決まります。

以上がGo の型アサーションと型切り替えは遅いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。