GO---map函数

发布时间:2026/7/14 5:02:17

GO---map函数 一、map 基本概念定义Go 语言中的map是键值对key-value存储结构也叫映射核心特性存储无序的键值对键key必须是唯一的重复赋值会覆盖旧值只有len()长度没有 cap 容量键的类型限制函数、切片、map 不能作为 key必须支持 比较语法格式go// 声明格式map [键类型]值类型 var 变量名 map[keyType]valueType二、map 的 3 种创建方式1. 直接初始化声明 赋值go// 键int类型值string类型 info : map[int]string{ 111: mike, 110: yoyo, // 最后一行逗号不能省略Go语法要求 }2. 仅声明未初始化不能直接赋值go// 仅定义类型未分配内存值为nil var m1 map[int]string // 注意直接赋值 m1[1] test 会报错3. make 函数创建推荐分配内存go// 方式1不指定长度 m2 : make(map[int]string) // 方式2指定初始长度优化性能底层仍可自动扩容 m3 : make(map[int]string, 2)三、map 常用操作1. 赋值与追加map 支持直接赋值不存在的 key 会自动追加底层自动扩容go// 初始化map m : map[int]string{1: mike, 2: yoyo} // 修改已有key的值 m[1] c // 追加新key-value m[3] go2. 遍历 map使用for range遍历结果无序支持只遍历 key / 只遍历 valuegom : map[int]string{1: mike, 2: yoyo, 3: go} // 遍历key和value for key, value : range m { fmt.Printf(%d 》 %s\n, key, value) } // 只遍历key for key : range m { fmt.Println(key:, key) } // 只遍历value for _, value : range m { fmt.Println(value:, value) }3. 判断 key 是否存在通过双返回值判断 key 是否存在避免获取零值误判gom : map[int]string{1: mike} // valuekey对应的值不存在则为类型零值 // okbool类型truekey存在falsekey不存在 value, ok : m[0] if ok { fmt.Println(key存在值为, value) } else { fmt.Println(key不存在) }4. 删除元素使用内置函数delete(map, key)删除不存在的 key不会报错gom : map[int]string{1: mike, 2: yoyo} // 删除key1的键值对 delete(m, 1) // 删除不存在的key无异常 delete(m, 100)四、map 作为函数参数map 是引用类型函数内部修改 map增删改会影响外部原 mapgopackage main import fmt // map作为函数参数 func test(m map[int]string) { delete(m, 1) // 函数内删除key } func main() { m : map[int]string{1: mike, 2: yoyo} test(m) fmt.Println(m) // 输出map[2:yoyo]原map被修改 }五、核心易错点总结仅声明未用make初始化的 mapnil map不能直接赋值map 键必须唯一重复赋值会覆盖旧值遍历 map无序不能依赖遍历顺序map 是引用类型函数传参是传引用会修改原数据delete()函数删除不存在的 key不会触发错误总结map 是无序键值对key 唯一、支持自动扩容无容量限制三种创建方式直接初始化、仅声明、make 创建推荐核心操作赋值、遍历、判断 key 存在、delete 删除map 是引用类型函数内修改会同步到外部原 map

相关新闻