我们知道有两种方法可以初始化地图(如下所示).我想知道这两种方法之间是否存在任何性能差异.
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)
在我的机器上,它们看起来大致相当.
您可以轻松地进行基准测试以进行比较.例如:
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)