百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Go语言-Map(哈希表)(go 哈希表)

liuian 2025-03-26 13:58 50 浏览

在 Go 语言(Golang)中,map 是一种 键值对(key-value) 数据结构,类似于 Python 的字典或 Java 的 HashMap。它提供了高效的键值存储和查找能力。

1. 定义map

Go 语言中的 map 可以使用 make() 或直接使用字面量初始化。

1.1 使用make()创建

m := make(map[string]int) // 创建一个 key 为 string,value 为 int 的 map

1.2 使用字面量创建

m := map[string]int{
    "apple":  5,
    "banana": 3,
    "orange": 8,
}

2.map的基本操作

2.1 添加和修改元素

m["pear"] = 4 // 添加一个新键值对
m["apple"] = 10 // 修改已有 key 的值

2.2 读取元素

value := m["apple"] // 读取 "apple" 对应的值
fmt.Println(value) // 输出: 10

2.3 删除元素

使用 delete(map, key) 删除元素:

delete(m, "banana") // 删除 key 为 "banana" 的元素

2.4 检查键是否存在

Go 语言的 map 访问时,如果 key 不存在,会返回值类型的零值。因此,可以使用 value, ok := map[key] 方式来判断:

val, ok := m["grape"]
if ok {
    fmt.Println("存在:", val)
} else {
    fmt.Println("不存在")
}

3. 遍历map

使用 for range 遍历 map:

for key, value := range m {
    fmt.Println(key, "=>", value)
}

注意:Go 语言的 map 遍历顺序是随机的,每次执行可能不同。


4.map的长度

可以使用 len() 获取 map 的键值对数量:

fmt.Println(len(m)) // 输出 map 中的元素个数

5.map的并发安全问题

Go 语言中的 map 不是线程安全的,如果在多个 Goroutine 中并发读写 map,可能会导致竞态问题(race condition)。解决方法:

  • 使用 sync.Mutex 加锁
  • 使用 sync.Map 代替

示例:

import (
    "sync"
)

var sm sync.Map

func main() {
    sm.Store("key1", "value1") // 存储
    sm.Store("key2", 123)

    if val, ok := sm.Load("key1"); ok { // 获取
        fmt.Println(val)
    }

    sm.Delete("key2") // 删除
}

6.map作为函数参数

Go 语言的 map 是引用类型,传递给函数时,不会复制,而是传递引用:

func modify(m map[string]int) {
    m["banana"] = 100
}

func main() {
    m := map[string]int{"banana": 3}
    modify(m)
    fmt.Println(m["banana"]) // 输出 100,说明原 `map` 也被修改
}

总结

  1. map 通过 make() 或字面量创建。
  2. map 访问不存在的键时,返回零值,需用 ok 变量判断是否存在。
  3. map 的遍历顺序是随机的。
  4. map 不是并发安全的,多线程读写需要 sync.Mutex 或 sync.Map 处理。
  5. map 作为函数参数时,传递的是引用,会修改原数据。

相关推荐

hplaserjet1020驱动下载 win10

您好,感谢您选择惠普产品。首先确认打印机本身无报错请您点击开始--设置--打印机和传真(设备和打印机)--看到打印机图标把鼠标放在图标上确认状态文档是否为就绪文档0如果不是建议删除文档重启电脑,...

联想小新怎么找售后维修(联想小新怎么找售后维修点)

给大家介绍几种解决的办法,大家可以试试:方法一:最简单的方法就是重启一下你的电脑,一般没有太大问题重启一下电脑就可以了。方法二:如果你电脑中安装了360安全卫士,那么你可以打开360安全卫士,然后点击...

笔记本win10系统重装(笔记本win10系统重装u盘启动)

win10系统重装方法如下第一步:下载安装好老毛桃U盘启动盘制作工具,制作一个U盘启动盘,建议U盘内存在8G以打开浏览器,搜索“老毛桃官网”,进入官网后,在首页点击“完整版”下载第二步:下载好win1...

主题之家移动版(主题中心下载手机版)

根据我的了解,汽车之家王国分为多个主题。其中包括新车评测、汽车导购、行业资讯、改装技术、赛车运动等。新车评测主题提供各种品牌和型号的汽车评测文章和视频,帮助消费者了解车辆性能和特点。汽车导购主题提供购...

win7电脑分盘(windows7电脑分盘)

在Win7系统电脑上分盘,您可以按照以下步骤进行操作:1.打开“计算机管理”:右键点击“计算机”图标,选择“管理”选项,打开“计算机管理”窗口。2.打开“磁盘管理”:在“计算机管理”窗口中,选择“...

电脑任务栏怎么还原到下边快捷键

电脑任务栏还原到下边方法:1.在任务栏上单击右键进入Windows电脑桌面后直接在任务栏上单击鼠标右键。2.点击锁定任务栏在弹出的菜单里面点击倒数第二个锁定任务栏选项。3.将任务栏拖到下方再按下鼠标左...

windows7怎么单击修复计算机

方法/步骤windows7的设置一般都可以在“控制面板”调整,鼠标的功能调整也不例外。首先打开“开始”-“控制面板”。“控制面板”默认是按照类别分类的,可能看不到鼠标选项,不过我们可以在搜索框里搜索“...

rog售后维修服务中心(rog官方维修点查询)

如果你的rog手机坏了,可以选择去rog手机官方维修点或者授权的维修中心修理。在这些地方,工程师们具有专业的维修知识和技能,能够确保对rog手机进行正确的维修和保养。此外,他们也会使用原厂备件,以确保...

装机系统哪个好(装系统那个好)

一、【重装win10正版系统】   二、【好用一键重装系统】  三、【优盘一键重装系统】 四、【免u盘一键重装系统】五、【小白在线一键重装系...

计算机怎么设置密码(计算机怎么设置密码锁屏)
  • 计算机怎么设置密码(计算机怎么设置密码锁屏)
  • 计算机怎么设置密码(计算机怎么设置密码锁屏)
  • 计算机怎么设置密码(计算机怎么设置密码锁屏)
  • 计算机怎么设置密码(计算机怎么设置密码锁屏)
win10刻录光盘的方法和步骤(win10系统怎么刻录光盘)

1.打开Windows10中的“文件资源管理器”,找到要刻录的文件或文件夹。2.选中文件/文件夹,右键单击选中“发送到-->DVDRW驱动器”。3.确认要刻录的光盘的名称和格式(默...

惠普笔记本电脑官网驱动下载

HP惠普打印机驱动官网是存在的。因为HP惠普是一家著名的电脑及相关产品制造商,他们会提供各种驱动程序和软件以保证设备的兼容性和稳定性。HP惠普打印机驱动官网可以通过搜索引擎查找,也可以通过HP惠普的官...

2025win7专业版激活密钥(2020win7专业版永久激活码)

cad序列号和密钥是111-111111,可以通用的,但激活码则需要通过CAD2014注册机对申请号的换算才能得出结果,当然结果有很多,用户可以不断的Generate一个。cad序列号和密钥是111-...

window7下载itunes什么版本(window7怎么下载itunes)

出现此问题一般是因为itunes没有正确安装,可以参考如下解决方法:1.请查看本机电脑数位,计算机---右键---属性---看是32的还是64的;2.官网下载数位对应的iTunes;3...

u盘什么牌子的好(大容量的u盘什么牌子好)

十大耐用云U盘排行分别是:第一名闪迪第二名雷克沙第三名金士顿第四名三星第五名美商海盗船第六名东芝第七名惠普第八名威刚第九名台电第十名朗科。十大耐用云U盘排行分别是:第一名闪迪第二名雷克沙第三名金士顿第...