Golang 语言Map(集合)

在 Go 语言(Golang)中,Map 是一种内置的数据结构,它存储了一组键值对(Key-Value pairs)。Map 的键(Key)必须是支持相等性比较的类型(如整型、字符串、结构体等),而值(Value)则可以是任意类型。Map 提供了快速查找、插入和删除键值对的能力,是一种非常高效的数据结构。

Map 的声明

Map 可以通过以下方式声明:

map[KeyType]ValueType  

其中,KeyType 是键的类型,ValueType 是值的类型。

例如,声明一个存储字符串键和整型值的 Map:

ages := make(map[string]int)  

或者,使用字面量直接初始化:

ages := map[string]int{  
    "Alice": 30,  
    "Bob":   25,  
    "Charlie": 35,  
}  

Map 的基本操作

1. 插入或更新键值对

使用 = 操作符给 Map 赋值时,如果键已经存在,则更新对应的值;如果键不存在,则添加新的键值对。

   ages["Dave"] = 40  

2. 访问值

通过键来访问 Map 中的值。如果键不存在,则返回一个值类型的零值。对于整型,零值是 0;对于字符串,零值是空字符串 "";等等。

   age := ages["Alice"] // 返回 30  
   ageOfDave := ages["Dave"] // 返回 40  
   ageOfEve := ages["Eve"] // 返回 0,因为 "Eve" 不在 Map 中  

3. 检查键是否存在

在 Go 中,通常使用两个步骤来检查键是否存在:首先尝试访问键对应的值,然后使用额外的逻辑(如与零值比较)来判断键是否真的存在。但从 Go 1.18 开始,可以使用 map 访问的逗号操作符来获取值和一个布尔值,该布尔值指示键是否存在于 Map 中。

   if age, ok := ages["Alice"]; ok {  
       fmt.Println("Age:", age)  
   } else {  
       fmt.Println("Key 'Alice' does not exist.")  
   }  

4. 删除键值对

使用内置的 delete 函数来删除 Map 中的键值对。如果键不存在,delete 函数不会报错。

   delete(ages, "Bob")  

5. 遍历 Map

使用 for range 循环来遍历 Map。遍历的顺序在 Go 中是不确定的,且每次运行都可能不同。

   for key, value := range ages {  
       fmt.Println("Key:", key, "Value:", value)  
   }  

注意事项

  • Map 的零值是 nil。未初始化的 Map 是 nil,且不能用于存储键值对。在使用前,你需要通过 make 函数或字面量来初始化它。
  • Map 的长度可以通过内置的 len 函数来获取,但该函数返回的是键值对的数量,而不是 Map 分配的内存大小。
  • Map 是引用类型,传递时传递的是指针。因此,如果你将 Map 传递给函数,并在函数内部对其进行修改,那么这些修改将反映到原始 Map 上。
  • 在并发环境下直接修改 Map 是不安全的。如果你需要在多个 goroutine 中安全地读写 Map,应该使用 sync.Map 或其他同步机制来保护对 Map 的访问。
推荐主页
AnQiCMS建站 安企CMS建站 网站营销 安企cms仿站 George Soros 乔治·索罗斯 Benjamin Graham 本杰明·格雷厄姆 John Templeton 约翰·邓普顿 Peter Lynch 彼得·林奇 Warren Buffett 沃伦·巴菲特 GoPay Raycast Nintendo Meta 美联储 美式期权 美股做空 美股开户 分析方法 CTA策略 期货基础知识 基金基础知识 股票术语 交易策略 金融指数 金融市场 交易所 股票基础 多多招商团长 多多团长 多多买菜 请假条模板 猪粪烘干机 小型鸡粪烘干机 上海到吴忠物流专线 上海到中卫物流专线 上海到固原物流专线 上海到银川物流专线 上海到宁夏物流专线 知乎seo 拼多多团长 自学做网站 学做网站 华为 OpenAI 马斯克 三星 Go语言 Golang Golang语言 小红书带货笔记 小红书带货 wordpress教程 WordPress建站服务器 WordPress建站教程 WordPress建站服务 WordPress建站公司 小红书笔记带货 抖音客服 抖音视频 抖音软件 快手商家 快手极速版 快手网页版 抖音蓝v 抖音创作者服务中心 抖音创作者服务平台 抖音创作中心 抖音下载安装 58同城 抖音订单 抖音网页创作者中心 抖音网页版 番茄小说 抖音短视频 抖音创作者中心 抖音创作服务平台 抖音官网 抖音极速版 抖音直播 抖音下载 短视频IP孵化厂家 短视频IP孵化 快手电商 短视频IP 小红书推广 微信支付 宝塔软件 宝塔 wordpress模板 linux 云服务器 wordpress安装 阿里云建站 阿里云服务器 阿里云播放器