在Golang中,使用make vs {}初始化的地图之间是否有任何性能差异

sri*_*ini 6 performance go

我们知道有两种方法可以初始化地图(如下所示).我想知道这两种方法之间是否存在任何性能差异.

var myMap map[string]int
Run Code Online (Sandbox Code Playgroud)

然后

myMap = map[string]int{}
Run Code Online (Sandbox Code Playgroud)

VS

myMap = make(map[string]int)
Run Code Online (Sandbox Code Playgroud)

Joh*_*don 5

在我的机器上,它们看起来大致相当.

您可以轻松地进行基准测试以进行比较.例如:

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)
}
Run Code Online (Sandbox Code Playgroud)

在3次不同的运行中产生的结果足够接近无关紧要:

第一次运行

$ 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
Run Code Online (Sandbox Code Playgroud)

第二轮

$ 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
Run Code Online (Sandbox Code Playgroud)

第三次运行

$ 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
Run Code Online (Sandbox Code Playgroud)