Golang 第四章 3.map哈希表
map 是 键值对(key-value)集合,类似于 Python 的字典。
键(key)是唯一的
值(value)可以重复
map 是动态的,可以随时添加或删除元素
创建 map
使用 make 创建空 map:
m := make(map[string]int)string → 键类型
int → 值类型
初始化 map
m := map[string]int{
"Alice": 30,
"Bob": 25,
}直接赋初始值
添加或修改元素
m["Charlie"] = 20 // 新增键值对
m["Alice"] = 31 // 修改已有键访问元素
fmt.Println(m["Alice"]) // 31⚠️ 如果键不存在,返回值类型的零值:
fmt.Println(m["David"]) // 0判断键是否存在
使用双赋值:
v, ok := m["David"]if ok {
fmt.Println("存在:", v)
} else {
fmt.Println("不存在")
}ok→ 布尔值,表示键是否存在
删除元素
delete(m, "Bob")如果键不存在,delete 什么也不做
遍历 map
for k, v := range m {
fmt.Println(k, v)
}⚠️ map 遍历顺序是 随机的
map 的零值
var m map[string]int零值是 nil
不能对 nil map 写入元素,会报错
可以读取,返回零值
示例:
var m map[string]int
fmt.Println(m["Alice"]) // 0
m["Bob"] = 25 // panic: assignment to entry in nil map正确方法:先用 make 创建:
m = make(map[string]int)
m["Bob"] = 25map 的 key 类型限制
key 必须是 可比较类型
例如:数字、字符串、指针、结构体(不包含切片、map、函数字段)
切片、map、函数类型不能做键
map 值为切片或 map
map 的值可以是 切片或其他 map:
m := map[string][]int{
"Alice": {1, 2, 3},
}
m["Alice"] = append(m["Alice"], 4)
fmt.Println(m["Alice"]) // [1 2 3 4]


评论