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

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

Barbara Streisand
Barbara Streisand原创
2024-11-01 01:11:02714浏览

 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