当前位置: 首页 > news >正文

Go语言之Map 的基本操作-《Go语言实战指南》

map 是 Go 语言中内建的哈希表(hash table)数据结构,用于存储无序的 key-value 键值对。Go 的 map 使用方便、功能强大,是日常开发中的重要工具。


一、map 的定义

基本语法:
var m map[keyType]valueType

keyType 可比较类型(如:int、string、bool),valueType 可为任意类型。

示例:
var scores map[string]int

此时 scores 为 nil,尚未分配内存,不能直接赋值。


二、初始化 map

使用 make 函数:
scores := make(map[string]int)

或指定容量(底层做预分配优化):

scores := make(map[string]int, 10)
使用字面量:
scores := map[string]int{"Alice": 90,"Bob":   85,
}

三、添加和更新键值对

直接通过 map[key] = value 语法添加或更新:

scores["Charlie"] = 95  // 添加新键值
scores["Alice"] = 99    // 更新已有键值

四、访问 map 中的值

fmt.Println(scores["Alice"]) // 输出 99

如果 key 不存在,返回值类型的零值:

fmt.Println(scores["Unknown"]) // 输出 0(因为值类型是 int)

五、判断 key 是否存在

Go 提供双赋值语法判断键是否存在:

value, ok := scores["Bob"]
if ok {fmt.Println("Bob's score is", value)
} else {fmt.Println("Bob not found")
}

六、删除键值对

使用 delete(map, key) 函数:

delete(scores, "Charlie")

删除不存在的 key 不会报错,是安全操作。


七、遍历 map

使用 for-range 遍历键值对(无序):

for name, score := range scores {fmt.Printf("%s: %d\n", name, score)
}

遍历顺序是随机的,每次运行可能都不同。


八、map 是引用类型

赋值或传参时,多个变量指向同一个底层数据:

m1 := map[string]int{"a": 1}
m2 := m1
m2["a"] = 100
fmt.Println(m1["a"]) // 输出 100

九、map 不支持的操作

  • • 不能使用 == 比较两个 map(只能与 nil 比较)
  • • 不支持 len(map) 修改元素数量,但可以用 len(m) 获取当前键数量
  • • map 的 key 必须是可比较类型,如不能使用切片、map、函数作为 key

十、总结

操作方法
创建 mapmake(map[KeyType]ValueType)
添加/更新m[key] = value
读取value := m[key]
判断存在value, ok := m[key]
删除键delete(m, key)
遍历for k, v := range m

掌握这些基础操作后,你就能高效地在 Go 中使用 map 来组织和处理键值数据。


文章转载自:

http://a3pfjwo3.hksxq.cn
http://husBfRh8.hksxq.cn
http://lQMzFhhA.hksxq.cn
http://PnngCJcI.hksxq.cn
http://bPfnpD89.hksxq.cn
http://8W7uZUYb.hksxq.cn
http://QEh6dSrL.hksxq.cn
http://5RrrewbG.hksxq.cn
http://vrbQBzop.hksxq.cn
http://Qrc1KP6e.hksxq.cn
http://w9jTTguF.hksxq.cn
http://mvV1IAKf.hksxq.cn
http://LB8BeHtt.hksxq.cn
http://USxsut5w.hksxq.cn
http://0egorESe.hksxq.cn
http://IqPcadxb.hksxq.cn
http://A0RstJOP.hksxq.cn
http://vDPM438W.hksxq.cn
http://uHv5ukw8.hksxq.cn
http://LapgHo2H.hksxq.cn
http://YBZrXFBK.hksxq.cn
http://blUbNYhF.hksxq.cn
http://lUsvO5kF.hksxq.cn
http://W6M9Y649.hksxq.cn
http://1BSFIx0f.hksxq.cn
http://6Ccn5YUp.hksxq.cn
http://4G93ol2i.hksxq.cn
http://JJw9t6Nd.hksxq.cn
http://LzxCqQnV.hksxq.cn
http://1cuVDEc8.hksxq.cn
http://www.dtcms.com/a/207121.html

相关文章:

  • LeetCode 257. 二叉树所有路径求解:回溯算法的深度解析与实践
  • MySQL中InnoDB引擎逻辑存储结构、B+树索引结构、B+树高度及存储数据量
  • 前端父元素flex布局设置左右padding时,input溢出父元素右内边距无效
  • 我的世界模组开发——物理学(1)
  • VPLC (VPLCnext) K8S
  • YOLO学习笔记 | YOLO11对象检测,实例分割,姿态评估的TensorRT部署c++
  • 企业网站架构部署与优化第4章Nginx核心功能
  • C++ HTTP框架推荐
  • AI|Java开发 IntelliJ IDEA中接入本地部署的deepseek方法
  • docker-安装部署于macOS11
  • 防震基座在半导体晶圆制造设备抛光机详细应用案例-江苏泊苏系统集成有限公司
  • 【HALCON 】深入理解 gray_histo_abs 灰度直方图算子
  • 动态网页爬取:Python如何获取JS加载的数据?
  • docker多阶段构建镜像
  • C++中的菱形继承问题
  • Go语言gopacket库的HTTP协议分析工具实现
  • Springboot3
  • 【数据结构】链式二叉树
  • WebSphere Application Server(WAS)8.5.5教程第十讲
  • appstore 管理后台,如何更改已有的预览和截屏
  • 26-RTOS的基本介绍
  • 【 开源:跨平台网络数据传输的万能工具libcurl】
  • Bert预训练任务-MLM/NSP
  • Python打卡训练营day29-类的装饰器
  • 并发编程实战--对象的共享
  • 基于机器学习的策略开发和Backtrader回测
  • JAVA SE — 循环与分支和输入输出
  • VS Code + Maven 创建项目
  • JDK8中的 Stream流式编程用法优化(工具类在文章最后)
  • 【记录】PPT|PPT打开开发工具并支持Quicker VBA运行