Go语言中map是引用类型,用于存储键值对,支持高效查找、插入和删除。1. 可通过make创建空map或使用字面量初始化;2. 遍历使用for-range循环,顺序无序;3. 访问前应检查键是否存在,避免零值误解;4. map非线程安全,多协程操作需加锁或用sync.Map。

Go语言中的map是一种内置的引用类型,用于存储键值对(key-value)数据。它类似于其他语言中的字典或哈希表。使用map可以高效地根据键查找、插入和删除对应的值。
创建Map并添加键值对
在Go中创建map有多种方式,最常见的是使用make函数或直接使用字面量初始化。
使用make创建空map:
// 创建一个键为string,值为int的mapageMap := make(map[string]int)
ageMap["Alice"] = 25
ageMap["Bob"] = 30
使用字面量初始化map:
立即学习“go语言免费学习笔记(深入)”;
// 声明并初始化mapageMap := map[string]int{
"Alice": 25,
"Bob": 30,
"Carol": 35,
}
如果尝试对nil的map进行写操作会引发panic,因此必须先用make或字面量初始化。
遍历Map
使用for-range循环可以遍历map中的所有键值对。每次迭代返回两个值:键和对应的值。
fmt.Printf("Key: %s, Value: %d\n", key, value)
}
遍历输出顺序是无序的,因为Go的map不保证遍历顺序。即使每次运行程序,顺序也可能不同。
如果只需要遍历键或值:
// 只遍历键for key := range ageMap {
fmt.Println("Key:", key)
} // 只遍历值
for _, value := range ageMap {
fmt.Println("Value:", value)
}
检查键是否存在
在访问map中的值时,建议先判断键是否存在,避免获取到零值造成误解。
if age, exists := ageMap["David"]; exists {fmt.Printf("David's age is %d\n", age)
} else {
fmt.Println("David not found")
}
通过第二个返回值exists可以判断键是否存在。如果不存在,age会是对应类型的零值(如int为0,string为空等)。
基本上就这些。掌握map的创建、赋值、遍历和存在性判断,就能在日常开发中灵活使用。注意并发安全问题,原生map不是线程安全的,多协程读写需加锁或使用sync.Map。










