2026-10-17 13:15:09
在Go语言中,使用range循环遍历Map是高效且简洁的方式,以下是具体用法和注意事项:
1. 基本遍历:获取键值对使用for key, value := range myMap可同时获取键和值:
myMap := map[string]int{"one": 1, "two": 2, "three": 3}for key, value := range myMap { fmt.Printf("Key: %s, Value: %dn", key, value)}输出示例(顺序不确定):
Key: two, Value: 2Key: three, Value: 3Key: one, Value: 1若只需键或值,可用_忽略不需要的部分:
在range循环中可直接修改Map的值,但需注意类型:
遍历顺序不确定:Map的遍历顺序由哈希表内部结构决定,每次运行可能不同。若需有序遍历,需先对键排序:
keys := make([]string, 0, len(myMap))for k := range myMap { keys = append(keys, k)}sort.Strings(keys) // 排序键for _, k := range keys { fmt.Println(k, myMap[k])}并发安全:Map在并发读写时会引发数据竞争,需使用sync.RWMutex加锁:
var mu sync.RWMutexmu.Lock()myMap["newKey"] = 4 // 写操作mu.Unlock()mu.RLock()value := myMap["key"] // 读操作mu.RUnlock()或使用并发安全的sync.Map(适用于读多写少场景)。
遍历顺序随机,不可依赖。
并发环境下需加锁或使用sync.Map。
掌握这些用法后,可高效、安全地操作Map,避免常见陷阱。