new一个map类型的指针为什么不可以
来源:8-4 图解new函数的执行过程

kiwi_0008
2021-10-12
老师,您好,如果我new的时候new了一个map类型的指针,那么为什么这些代码不能直接使用呢,可以讲解下map这种类型和int这些类型的new有什么区别吗,实验的代码如下:
mapptr := new(map[string]string)
(*mapptr)[“a”] = "b"
报错:panic: assignment to entry in nil map
写回答
1回答
-
bobby
2021-10-13
map比较特殊,需要专门说明一下,map的本质是一个hmap结构体,但是当我们 var m map[string]string实例化的时候这是一个hmap的指针,注意这里是指针不是结构体,这个和slice的本质不一样,slice的本质是一个结构体本身,因为指针变量的初始值是nil,所以我们var m map[string]string一个变量必须要使用 make去初始化,slice不用初始化可以使用,因为slice本质是一个结构体而不是指针,mapptr := new(map[string]string)这个意思是给我初始化一个变量,这个变量中放的是一个指向map的指针,但是这个map的内存你没有初始化啊,所以(*mapptr)拿到的是一个变量,这个变量中放的是一个可以指向hmap结构体的指针,但是这个hmap你没有初始化,所以就出现了这个问题,所以记住: map只能使用make初始化
112021-10-13
相似问题
为什么要传指针类型呢?
回答 1
关于url 参数转换为int 类型问题
回答 1
setInv接口出错问题
回答 1
go处理datetime数据类型
回答 1
所以map的struct结构长什么样子
回答 1