var mm = make(map[int]string) //这个是用make申明
fmt.Println(mm) //输出map[]
var mm2 map[int]string //这个是像普通类型一样申明
fmt.Println(mm2) //输出map[]
mm = map[int]string{9:"nine", 7:"seven"}
mm2 = map[int]string{8:"eight", 4:"four"}
fmt.Println(mm)
fmt.Println(mm2)
go中 为什么需要用make来初始化?直接像普通数据类型一样用var申明不就好了吗?我看效果也是一样的,有什么区别?
var mm = make(map[int]string)
跟 var mm2 map[int]string
感觉都给变量初始化了。
有疑问加站长微信联系(非本文作者)

A: make 可以进行内存的预分配
Q:直接像普通数据类型一样用var申明不就好了吗?我看效果也是一样的,有什么区别?
一梭到底说明你对new和make的区别并不了解, 比如:
是有区别又有关系的,不同场合需要不同的使用. 不过实际,map比较少那么用,而slice是有场合使用的
这点还是知道的,只是不知道,什么场合只能用new ,什么场合只能用make ? chan(这个必须make)? 预留容量?申明最大空间?实际工程你敢用?
用new的场合极少,目前暂时没遇到过. 当然,有的面试会问这个区别的.区别涉及一些底层原理. 用make有时的确需要申明最大空间或预留容量.实际工程我就用过.因为我非常清楚需求多大空间来避免多次扩容带来的性能损失. 像slice每次扩容在小于1024都是2倍扩容,一扩容就要引起数据拷贝.
一般这种数组都可以重复利用,arr = arr[:0],就变成了新的,地址不变,容量以前使用的一致,岂不爽哉