为了账号安全,请及时绑定邮箱和手机立即绑定

golang 中的 make 和 initialize struct 有什么区别?

golang 中的 make 和 initialize struct 有什么区别?

Go
陪伴而非守候 2021-12-20 19:16:53
我们可以通过make函数创建通道,通过{}表达式创建新对象。ch := make(chan interface{})o := struct{}{}但是,新地图make和{}新地图有什么区别?m0 := make(map[int]int)m1 := map[int]int{}
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

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

}


查看完整回答
反对 回复 2021-12-20
?
倚天杖

TA贡献1828条经验 获得超3个赞

来自make关键字的文档:

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

因此,就地图而言,使用make和使用空地图文字没有区别。


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号