ホームページ >バックエンド開発 >Golang >Go でマップを初期化する場合、「make」と「{}」の間にパフォーマンスの違いはありますか?

Go でマップを初期化する場合、「make」と「{}」の間にパフォーマンスの違いはありますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 01:11:02814ブラウズ

 Is There a Performance Difference Between

Go では、「make」と「{}」を使用して初期化されたマップ間のパフォーマンスのギャップを明らかにします

Go では、開発者は柔軟性を備えています「make」構文と「{} 構文」の 2 つの方法でマップを初期化します。これにより、当然、これらのアプローチ間にパフォーマンスの違いがあるかどうかという疑問が生じます。

パフォーマンスを比較するために、ベンチマーク テストを作成できます。両方の方法を使用してマップの初期化にかかる時間を測定します。以下に示すように、提供されたベンチマーク テストはこれを示しています:

<code class="go">package bench

import "testing"

var result map[string]int

func BenchmarkMakeLiteral(b *testing.B) {
    var m map[string]int
    for n := 0; n < b.N; n++ {
        m = InitMapLiteral()
    }
    result = m
}

func BenchmarkMakeMake(b *testing.B) {
    var m map[string]int
    for n := 0; n < b.N; n++ {
        m = InitMapMake()
    }
    result = m
}

func InitMapLiteral() map[string]int {
    return map[string]int{}
}

func InitMapMake() map[string]int {
    return make(map[string]int)
}</code>

このベンチマークを複数回実行すると、実質的に同等であることを示す結果が得られます。パフォーマンス:

$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               160 ns/op
BenchmarkMakeMake-8     10000000               171 ns/op
ok      github.com/johnweldon/bench     3.664s

$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               182 ns/op
BenchmarkMakeMake-8     10000000               173 ns/op
ok      github.com/johnweldon/bench     3.945s

$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               170 ns/op
BenchmarkMakeMake-8     10000000               170 ns/op
ok      github.com/johnweldon/bench     3.751s

これは、平均して、「make」構文を使用したマップの初期化と「{} 構文を使用したマップの初期化のパフォーマンスの差は無視でき、本質的に同等であると考えられることを示しています。

以上がGo でマップを初期化する場合、「make」と「{}」の間にパフォーマンスの違いはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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