3.3 map

本篇学习 Go map 的创建、取值与删除,并能正确处理不存在键与初始化问题。

字数 578 字

map

概念说明

map(映射、字典)是 Go 的内置数据结构,用于存储无序的 key-value 键值对。
它适合做“通过键快速查值”的场景,例如用户信息、配置表、计数器等。

语法/规则

  1. 类型写法是 map[K]V,例如 map[string]int
  2. key 必须是可比较类型(例如 stringintbool、数组、结构体);value 可以是任意类型。
  3. map 在写入前必须初始化,可用 make 或字面量。
  4. 读取不存在的键会返回 value 类型零值。
  5. 使用 value, ok := m[key] 可以区分“键不存在”与“值刚好是零值”。
  6. delete(m, key) 删除键值对;删除不存在的键不会报错。
  7. for range 遍历 map 时顺序不固定。

初始化与增删改查示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import "fmt"

func main() {
	m1 := make(map[string]string)
	m1["name"] = "阿斌"
	m1["city"] = "上海"

	fmt.Println(m1["name"])

	delete(m1, "city")
	fmt.Println(m1)
}

输出结果:

1
2
阿斌
map[name:阿斌]

不存在键取值示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
package main

import "fmt"

func main() {
	ages := map[string]int{
		"阿斌": 21,
	}

	age1 := ages["小王"]
	fmt.Println(age1)

	age2, ok := ages["小王"]
	fmt.Println(age2, ok)
}

输出结果:

1
2
0
0 false

常见错误

  1. 只声明不初始化就写入,例如 var m map[string]int; m["a"]=1,会触发 assignment to entry in nil map
  2. 读取 map 只接收一个返回值时,无法区分“键不存在”和“键存在但值为零值”。
  3. 误以为 map 遍历顺序固定,导致业务逻辑依赖顺序而出错。
  4. 把不可比较类型(如切片 []int)当作 key,会编译失败。
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
载入天数...载入时分秒...
发表了 0 篇文章 · 发表了 46 篇笔记 · 总计 2 万 5 千字(其中笔记 25104 字)