首页  >  文章  >  后端开发  >  Go 中映射初始化的 `make` 和 `{}` 之间有性能差异吗?

Go 中映射初始化的 `make` 和 `{}` 之间有性能差异吗?

Linda Hamilton
Linda Hamilton原创
2024-11-01 05:08:27689浏览

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