go中 slice chan map为什么需要用make初始化

zackzhangkai · · 1876 次点击
一般这种数组都可以重复利用,arr = arr[:0],就变成了新的,地址不变,容量以前使用的一致,岂不爽哉
#6
更多评论
```golang package main import "fmt" func main() { var mm = make(map[int]string) //这个是用make申明,make 的作用是初始化内置的数据结构,可以对切片、哈希表和 Channel进行初始化; fmt.Println(mm==nil) //输出map[],这里的mm2 不是nil值 var mm2 map[int]string //这个是像普通类型一样申明,这里的mm2 是nil值 fmt.Println(mm2==nil) //输出map[] mm = map[int]string{9:"nine", 7:"seven"} mm2 = map[int]string{8:"eight", 4:"four"} fmt.Println(mm) fmt.Println(mm2) } ``` * Q:go中 为什么需要用make来初始化 * A: make 可以进行内存的预分配 * Q:直接像普通数据类型一样用var申明不就好了吗?我看效果也是一样的,有什么区别? * A: 这两者是有区别的,见上面代码注释
#1
* 实际工程中可以使用 map[int]string{}{}代替,减少心智负担,什么new ,make 都不需要 * 当然有些场景是只需要类型的,用于反射获取类型,比如errors.Is就是这么干的 * struct{}{},[]int{},map[int]int{}一梭子干到底
#2