什么';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
没有区别