我们可以通过make
函数创建频道,通过{}
表达式创建新对象。
ch := make(chan interface{})
o := struct{}{}
但是,make
和{}
对新地图的区别是什么?
m0 := make(map[int]int)
m1 := map[int]int{}
答案 0 :(得分:8)
make
可用于初始化具有预分配空间的地图。它需要一个可选的第二个参数。
m0 := make(map[int]int, 1000) // allocateds space for 1000 entries
分配需要cpu时间。如果您知道地图中将有多少条目,您可以预先为所有条目分配空间。这减少了执行时间。这是一个程序,您可以运行以验证这一点。
package main
import "fmt"
import "testing"
func BenchmarkWithMake(b *testing.B) {
m0 := make(map[int]int, b.N)
for i := 0; i < b.N; i++ {
m0[i] = 1000
}
}
func BenchmarkWithLitteral(b *testing.B) {
m1 := map[int]int{}
for i := 0; i < b.N; i++ {
m1[i] = 1000
}
}
func main() {
bwm := testing.Benchmark(BenchmarkWithMake)
fmt.Println(bwm) // gives 176 ns/op
bwl := testing.Benchmark(BenchmarkWithLitteral)
fmt.Println(bwl) // gives 259 ns/op
}
答案 1 :(得分:0)
来自make
关键字的文档:
地图:初始分配是根据大小而不是 结果映射的长度为0.可以省略大小,在这种情况下为a 分配小的起始大小。
因此,就地图而言,使用make
和使用空地图文字之间没有区别。