GO---map函数

一、map 基本概念

  1. 定义 :Go 语言中的map是键值对(key-value) 存储结构,也叫映射

  2. 核心特性

    • 存储无序的键值对
    • 键(key)必须是唯一的,重复赋值会覆盖旧值
    • 只有len()长度,没有 cap 容量
    • 键的类型限制:函数、切片、map 不能作为 key(必须支持 == 比较)
  3. 语法格式

    go

    Go 复制代码
    // 声明格式:map [键类型]值类型
    var 变量名 map[keyType]valueType

二、map 的 3 种创建方式

1. 直接初始化(声明 + 赋值)

go

Go 复制代码
// 键int类型,值string类型
info := map[int]string{
	111: "mike",
	110: "yoyo", // 最后一行逗号不能省略(Go语法要求)
}

2. 仅声明(未初始化,不能直接赋值)

go

Go 复制代码
// 仅定义类型,未分配内存,值为nil
var m1 map[int]string
// 注意:直接赋值 m1[1] = "test" 会报错!

3. make 函数创建(推荐,分配内存)

go

Go 复制代码
// 方式1:不指定长度
m2 := make(map[int]string)

// 方式2:指定初始长度(优化性能,底层仍可自动扩容)
m3 := make(map[int]string, 2)

三、map 常用操作

1. 赋值与追加

map 支持直接赋值,不存在的 key 会自动追加,底层自动扩容

go

Go 复制代码
// 初始化map
m := map[int]string{1: "mike", 2: "yoyo"}

// 修改已有key的值
m[1] = "c++"

// 追加新key-value
m[3] = "go"

2. 遍历 map

使用for range遍历,结果无序,支持只遍历 key / 只遍历 value

go

Go 复制代码
m := 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 是否存在,避免获取零值误判

go

Go 复制代码
m := map[int]string{1: "mike"}

// value:key对应的值(不存在则为类型零值)
// ok:bool类型,true=key存在,false=key不存在
value, ok := m[0]
if ok {
	fmt.Println("key存在,值为:", value)
} else {
	fmt.Println("key不存在")
}

4. 删除元素

使用内置函数delete(map, key),删除不存在的 key不会报错

go

Go 复制代码
m := map[int]string{1: "mike", 2: "yoyo"}

// 删除key=1的键值对
delete(m, 1)

// 删除不存在的key,无异常
delete(m, 100)

四、map 作为函数参数

map 是引用类型,函数内部修改 map(增删改),会影响外部原 map

go

Go 复制代码
package 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被修改
}

五、核心易错点总结

  1. 仅声明未用make初始化的 map(nil map),不能直接赋值
  2. map 键必须唯一,重复赋值会覆盖旧值
  3. 遍历 map无序,不能依赖遍历顺序
  4. map 是引用类型,函数传参是传引用,会修改原数据
  5. delete()函数删除不存在的 key,不会触发错误

总结

  1. map 是无序键值对,key 唯一、支持自动扩容,无容量限制
  2. 三种创建方式:直接初始化、仅声明、make 创建(推荐)
  3. 核心操作:赋值、遍历、判断 key 存在、delete 删除
  4. map 是引用类型,函数内修改会同步到外部原 map
相关推荐
sunshine22 girl15 分钟前
Java学习六 Java常见API-1-Radom随机数
java·开发语言·学习
可乐鸡翅yeah_18 分钟前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒30 分钟前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
潼心1412o34 分钟前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
广州华水科技39 分钟前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
夜晚回家1 小时前
Python 零基础入门 | 输入的数字为什么不能直接算
开发语言·python
时间的拾荒人1 小时前
Qt 事件机制全解析:从事件处理到事件过滤器
开发语言·qt·面试
于指尖飞舞1 小时前
java面试题总结
java·开发语言
打工仔折腾 AI1 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战
yivifu1 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub