Golang 第四章 3.map哈希表

  • By v2ray节点

  • 2026-03-24 16:00:51

  • 评论

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"] = 25


map 的 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]


v2ray节点购买