Go の型アサーションと型スイッチ: パフォーマンスに関する考慮事項
Go では、型アサーションと型スイッチがランタイム型検出メカニズムを提供します。ただし、 C/C の型メンバー比較などのメソッドと比較したパフォーマンスについて懸念が生じています。
その影響を評価するために、次のメソッドの速度を比較するベンチマーク テストが実施されました。
package main import ( "testing" ) type myint int64 type Inccer interface { inc() } func (i *myint) inc() { *i = *i + 1 } func BenchmarkIntmethod(b *testing.B) { i := new(myint) incnIntmethod(i, b.N) } func BenchmarkInterface(b *testing.B) { i := new(myint) incnInterface(i, b.N) } func BenchmarkTypeSwitch(b *testing.B) { i := new(myint) incnSwitch(i, b.N) } func BenchmarkTypeAssertion(b *testing.B) { i := new(myint) incnAssertion(i, b.N) } // Remaining helper functions...
AMD R7 2700X マシン (Go v1.12.9) での結果は、すべてのメソッドが同様であることを示しています。パフォーマンス:
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
amd64 マシンでの 2015 年の以前の結果とは対照的に、直接メソッド呼び出しやインターフェイス アクセスと比較して、型スイッチやアサーションを使用した場合に重大な速度の低下は観察されません。
全体的に、Go では型アサーションとスイッチのパフォーマンスが大幅に向上し、他の型チェック手法と同等になりました。したがって、大幅なパフォーマンスの低下を心配することなく、コード内でこれらを利用できます。
以上がGo の型アサーションと型スイッチは他の型チェック方法と比較してどのように実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。