golang中make和initialize struct之间的区别是什么?

时间:2016-03-15 00:57:21

标签: go

我们可以通过make函数创建频道,通过{}表达式创建新对象。

ch := make(chan interface{})
o := struct{}{}

但是,make{}对新地图的区别是什么?

m0 := make(map[int]int)
m1 := map[int]int{}

2 个答案:

答案 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和使用空地图文字之间没有区别。