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

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

Linda Hamilton
發布: 2024-11-01 05:08:27
原創
836 人瀏覽過

Is There a Performance Difference Between `make` and `{}` for Map Initialization in Go?

Go 中映射初始化方法的效能比較:make 與{}

在Go 中,可以使用兩種主要方法來初始化映射:

<code class="go">var myMap map[string]int
myMap = map[string]int{}</code>
登入後複製

<code class="go">myMap = make(map[string]int)</code>
登入後複製

問題在於這些方法之間是否有明顯的表現差異。

效能評估

為了評估效能,使用自訂測試套件進行了基準測試。多次運行的結果表明兩種方法之間的差異可以忽略不計。以下是範例基準程式碼:

<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
登入後複製

結論

根據這些基準測試結果,使用map[string]int{} 和make(map[string] 初始化映射之間沒有顯著的性能差異整數)。兩種方法在樣本機器上表現出幾乎相同的性能。

以上是Go 中映射初始化的 `make` 和 `{}` 之間有效能差異嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板