首頁 >後端開發 >Golang >Go 中初始化映射的「make」和「{}」之間有效能差異嗎?

Go 中初始化映射的「make」和「{}」之間有效能差異嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-01 01:11:02803瀏覽

 Is There a Performance Difference Between

在Go 中,揭示使用「make」與「{}」初始化的映射之間的效能差距

在Go 中,開發人員具有靈活性透過兩種方式初始化映射:「make」和「{} 語法。這自然會提出這些方法之間是否存在效能差異的問題。

為了比較效能,可以建立一個基準測試來使用這兩種方法測量初始化地圖所需的時間,如下所示,所提供的基準測試說明了這一點:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn