什么';golang中生成和初始化结构的区别是什么?

什么';golang中生成和初始化结构的区别是什么?,go,Go,我们可以通过make函数创建通道,通过{}表达式创建新对象 ch := make(chan interface{}) o := struct{}{} 但是,make和{}新地图有什么区别 m0 := make(map[int]int) m1 := map[int]int{} 从make关键字的文档中: 地图:根据大小进行初始分配,但 结果贴图的长度为0。尺寸可以省略,在这种情况下 分配的起始大小较小 因此,在映射的情况下,使用make和使用空映射文本之间没有区别。make可用于初始化具有预分

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

ch := make(chan interface{})
o := struct{}{}
但是,
make
{}
新地图有什么区别

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

make
关键字的文档中:

地图:根据大小进行初始分配,但 结果贴图的长度为0。尺寸可以省略,在这种情况下 分配的起始大小较小


因此,在映射的情况下,使用
make
和使用空映射文本之间没有区别。

make
可用于初始化具有预分配空间的映射。它采用可选的第二个参数

m0:=make(map[int]int,1000)//为1000个条目分配空间

分配需要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
}
主程序包
输入“fmt”
导入“测试”
func BenchmarkWithMake(b*testing.b){
m0:=make(映射[int]int,b.N)
对于i:=0;i
没有区别