map 怎么确定 key 是否存在,如果访问了不存在的 key 会出现什么问题?
在测试的时候,发现可以访问不存在的 key,打印出来的值是对应 value 类型的空值,求解原理
想要知道:
- 空 map 的大小是怎么样的
- 空 map(或者 map)在内存中的布局是怎么样的
- 为什么对不存在的 key 的访问不会报错,为什么这么设计
这些可能需要深入查看 map 的源码了 :joy:
#2
更多评论
```
if value, ok := m[key]; ok {
fmt.Println("key存在")
} else {
fmt.Println("key不存在, value为空值:", value)
}
```
在Go中操作map, 无论key是否存在都不会panic或者返回error
PS. 不知道你是想要什么**原理**
#1
在官网中找到了**索引表达式**的描述: https://golang.org/ref/spec#Index_expressions
文档里说明了map[key] 通过返回第二参数来标识是否存在 key 。
其他更详细的 map 实现,需要研究 map 的实现源码了。
#3