type 自定义map使用问题

zhjzjnb · 2018-03-02 12:10:42 · 1742 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-03-02 12:10:42 的主题,其中的信息可能已经有所发展或是发生改变。

map是需要make初始化的,然后我自定义了一个map

m0,m1都可以使用,m2却报错assignment to entry in nil map

想请教下m0,m1为什么没报错,内部如何实现初始化操作的?

package main

import "fmt"

type HashMap map[string]bool

func main() {

    m0 := HashMap{}
    m0["0"] = false
    fmt.Println(m0)

    m1 := &HashMap{}
    (*m1)["1"] = false
    fmt.Println(m1)

    m2 := new(HashMap)
    (*m2)["2"] = false
    fmt.Println(m2)
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1742 次点击  
加入收藏 微博
2 回复  |  直到 2018-03-02 18:00:14
tk103331
tk103331 · #1 · 7年之前

new 是初始化为零值,map的零值是nil;可以使用make(HashMap)

dong-hao
dong-hao · #2 · 7年之前

原因在于 map slice channel 这三种类型的变量,必须初始化后,才可以使用。new() 只是声明了一段内存并返回了地址,并没有对这个 map 进行初始化,因此报错了。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传