Go Map

Map 是 Go 的键值映射结构,用于快速按键访问数据,但其零值、写入规则和遍历特征需要单独建立直觉。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go Map

一句话定义

Map 是 Go 用于按键快速查找值的内建哈希映射结构,但它的零值、写入行为和遍历顺序都不能套用“普通对象字面量”的直觉来理解。

核心机制 / 工作原理

Map 最常见的特征有:

  • 通过键访问值
  • 零值是 nil
  • 需要 make 后才能安全写入
  • 遍历顺序不保证稳定

最小例子 / 最小场景

scores := make(map[string]int)
scores["alice"] = 95

value, ok := scores["bob"]
fmt.Println(value, ok) // 0 false

这段代码体现了两个 Go 高频点:

  • 读不存在的键不会报错,而是返回值类型零值
  • ok 用来区分“值本身刚好是零值”还是“键不存在”

为什么这部分重要

Go 里缓存、索引、去重、计数、聚合逻辑大量依赖 map。很多 bug 并不来自 API 不会用,而是没有意识到零值和存在性判断是两回事。

边界与易混淆点

  • nil map 可读但不可写
  • map 遍历顺序不稳定,不能把它当作有序结构
  • 并发读写 map 需要额外同步,不能想当然地跨 goroutine 直接共享写入
创建于 2026/6/20 更新于 2026/6/20