映射 Map
map[K]V 哈希表、make 初始化、comma ok 惯用法、delete
映射 Map
Go 的 map 是哈希表,使用前必须 make 初始化。读取不存在的 key 返回零值——不会抛异常。
学完本章你将: 掌握 map[K]V、make 初始化、comma ok 惯用法、delete。
创建与使用
go
package main
import "fmt"
func main() {
// make 创建
ages := make(map[string]int)
// 赋值
ages["小明"] = 25
ages["小红"] = 22
// 字面量初始化
scores := map[string]int{
"数学": 92,
"语文": 88,
}
fmt.Println(ages["小明"]) // 25
}
comma ok 惯用法 —— 判断 key 是否存在
go
// 直接取——不存在的 key 返回零值
age := ages["不存在"] // 0(int 的零值)
// comma ok 惯用法:区分"不存在"和"值为零值"
if age, ok := ages["小明"]; ok {
fmt.Println("年龄:", age)
} else {
fmt.Println("不存在")
}
遍历与删除
go
// 遍历(顺序是随机的!)
for name, age := range ages {
fmt.Printf("%s → %d\n", name, age)
}
// 删除
delete(ages, "小明")
// 安全地边遍历边删除
for key := range ages {
if shouldDelete(key) {
delete(ages, key)
}
}
nil map 陷阱
go
var m map[string]int // nil map
// m["key"] = 1 // ❌ panic! nil map 不能写
// 读取 nil map 不会 panic(返回零值)
fmt.Println(m["key"]) // 0(静默返回)
⚠️ 在使用前始终初始化 map:
m := make(map[string]int)或用字面量。