Dictionary 使用new()初始化映射,然后为紧急异常分配一个键,为什么?

Dictionary 使用new()初始化映射,然后为紧急异常分配一个键,为什么?,dictionary,pointers,go,Dictionary,Pointers,Go,我的go版本是go1.13.6 运行以下代码: func main() { s := new(map[int]int) (*s)[1] = 4 println((*s)[1]) } 控制台说: panic: assignment to entry in nil map 因此,我尝试以下方法: func main() { s := new(map[int]int) println(s == nil) } func main() { s := new(map[int]i

我的go版本是
go1.13.6

运行以下代码:

func main() {
  s := new(map[int]int)
  (*s)[1] = 4
  println((*s)[1])
}
控制台说:

panic: assignment to entry in nil map
因此,我尝试以下方法:

func main() {
  s := new(map[int]int)
  println(s == nil)
}
func main() {
  s := new(map[int]int)
  *s = map[int]int{}
  (*s)[1] = 4
  println((*s)[1])
}
控制台显示
false


然后我试试这个:

func main() {
  s := new(map[int]int)
  println(s == nil)
}
func main() {
  s := new(map[int]int)
  *s = map[int]int{}
  (*s)[1] = 4
  println((*s)[1])
}
控制台显示
4

仅分配内存并将其归零,而归零的映射尚未准备好使用

内置函数make(T,args)的用途不同于new(T)。它仅创建切片、贴图和通道,并返回类型为T(非*T)的初始化(非零)值。区别的原因是,这三种类型在封面下表示对必须在使用前初始化的数据结构的引用。例如,切片是一个三项描述符,包含指向数据(在数组中)、长度和容量的指针,在初始化这些项之前,切片为零。对于切片、贴图和通道,make初始化内部数据结构并准备值以供使用

你应该改用