登录
首页 >  Golang >  Go问答

为什么我不能在 Go 中使用 new() 初始化地图?

来源:stackoverflow

时间:2024-04-24 10:00:27 113浏览 收藏

一分耕耘,一分收获!既然都打开这篇《为什么我不能在 Go 中使用 new() 初始化地图?》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

package main

import "fmt"

func main() {
    p := new(map[string]int)
    m := make(map[string]int)
    m["in m"] = 2
    (*p)["in p"] = 1
    fmt.Println(m)
    fmt.Println(*p)
}

上面的代码给出了一个错误panic:赋值给nil map中的条目。如果我在将对插入之前打印 *p ,则输出是正确的。看来我就是无法修改 *p


解决方案


newmake 都用于在程序中分配内存,但它们的工作方式不同。 new(T, args) 将内存清零并返回内存地址(*T 类型的值),但不初始化该内存。另一方面,make(T, args) 初始化 T 类型的值。地图需要初始化,因为虽然地图可以为空,但地图本身的结构仍然是非零的,因此需要在使用前初始化。

来自Effective Go

今天关于《为什么我不能在 Go 中使用 new() 初始化地图?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>