ホームページ >バックエンド開発 >Golang >Go の型アサーションと型スイッチは他の型チェック方法と比較してどのように実行されますか?

Go の型アサーションと型スイッチは他の型チェック方法と比較してどのように実行されますか?

DDD
DDDオリジナル
2024-12-14 08:33:12825ブラウズ

How Do Go's Type Assertions and Type Switches Perform Compared to Other Type Checking Methods?

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

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