全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-13 6 分钟 ✍️ juanwangdev

Go映射(map)

Go映射是键值对的无序集合,键唯一,值可重复。

map声明与初始化

声明语法

Go
// 声明map(nil map,不能直接使用)
var m map[string]int

// 声明并初始化
var m = map[string]int{"a": 1, "b": 2}

// 短声明初始化
m := map[string]int{"a": 1, "b": 2}

// make初始化
m := make(map[string]int)
m := make(map[string]int, 10)  // 预分配容量

nil map不能写入,必须先初始化。

基本操作

Go
m := make(map[string]int)

// 增:添加键值对
m["a"] = 1
m["b"] = 2

// 改:修改值
m["a"] = 10

// 查:获取值
v := m["a"]
fmt.Println(v)  // 10

// 删:删除键值对
delete(m, "a")

读取与检查

获取值

Go
m := map[string]int{"a": 1}

// 直接获取
v := m["a"]   // 1

// 获取不存在的键
v := m["x"]   // 0(零值)

读取不存在的键返回值类型的零值,不报错。

检查键是否存在

Go
m := map[string]int{"a": 1}

// ok返回键是否存在
v, ok := m["a"]
if ok {
    fmt.Println("存在:", v)
}

v, ok := m["x"]
if !ok {
    fmt.Println("不存在")
}

使用ok模式判断键是否存在。

map遍历

for range遍历

Go
m := map[string]int{"a": 1, "b": 2, "c": 3}

// 遍历键值对
for key, value := range m {
    fmt.Println(key, value)
}

// 只遍历键
for key := range m {
    fmt.Println(key)
}

map遍历顺序随机,每次遍历顺序可能不同。

map类型限制

键类型限制

Go
// ✓ 键可以是:基本类型、指针、struct、数组
m := map[int]string{}
m := map[string]int{}
m := map[Point]int{}  // struct作为键

// ✗ 键不能是:slice、map、函数(不可比较)
m := map[[]int]string{}  // 编译错误
m := map[map[int]int]string{}  // 编译错误

键类型必须可比较(支持==和!=)。

值类型任意

Go
// 值可以是任意类型
m := map[string]int{}
m := map[string][]int{}      // 值是slice
m := map[string]map[int]int{} // 值是map
m := map[string]interface{}{} // 值是任意类型

map操作示例

Go
func main() {
    // 创建map
    scores := make(map[string]int)

    // 添加
    scores["Tom"] = 85
    scores["Jerry"] = 90

    // 修改
    scores["Tom"] = 88

    // 查找
    score, ok := scores["Tom"]
    if ok {
        fmt.Println("Tom成绩:", score)
    }

    // 删除
    delete(scores, "Jerry")

    // 遍历
    for name, score := range scores {
        fmt.Println(name, score)
    }

    // 获取长度
    fmt.Println("数量:", len(scores))
}

map常用操作表

操作语法说明
创建make(map[K]V)初始化map
添加m[key] = value添加键值对
获取m[key]获取值(不存在返回零值)
检查v, ok := m[key]判断键是否存在
修改m[key] = value修改已存在的键
删除delete(m, key)删除键值对
遍历for k, v := range m随机顺序遍历
长度len(m)键值对数量

要点总结

  • map是键值对集合,键唯一
  • nil map不能写入,需先初始化
  • make或复合字面量初始化map
  • 读取不存在键返回零值
  • 用v, ok := m[key]判断键是否存在
  • delete删除键值对
  • range遍历顺序随机
  • 键必须可比较,slice/map/函数不能作键
  • 值可以是任意类型

📝 发现内容有误?点击此处直接编辑

← 上一篇 Go数组
下一篇 → Go结构体
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库