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

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://www.xdnf.cn/news/8271.html

相关文章:

  • Windows逆向工程提升之FOA RVA VA OEP IMAGE BASE
  • c/c++的opencv膨胀
  • AI Agent开发第73课-预训练qwen3-如何加入自己的语料
  • 电子电路:CMOS反相器的工作原理
  • grafana dashboard 单位 IEC SI a i
  • LeetCode 52. N 皇后 II java题解
  • DeepSeek 赋能数字艺术:从灵感到成品的智能跃迁
  • Linux系统:基础命令之 ls~pwd~cd
  • # JavaSE核心知识点02面向对象编程
  • 【Bluedroid】蓝牙 HID HOST连接全流程源码解析
  • 基于“理采存管用”的数据中台建设方案
  • 高等数学-三角函数
  • PyTorch模型生命周期管理全流程指南:从训练到生产部署
  • SpringBoot的前世今生
  • python 中 SchedulerManager 使用踩坑
  • Spring AI之Advisors (增强器)
  • 中证500股指期货的名词解释
  • Ubuntu-多显示器黑屏问题及nvidia显卡驱动安装
  • 华为模拟器练习简单的拓扑图(五台交换机和pc,4台路由器)
  • MongoDB数据库在现代应用中的高效实践与优化策略
  • 47页 @《人工智能生命体 新启点》中國龍 原创连载
  • Linux下的Socket编程
  • 多端协同开发能力大比拼: AI 编程工具技术架构对比
  • 华为2025年校招笔试真题手撕教程(一)
  • vue3项目动态路由的相关配置踩坑记录
  • LeetCode Hot100 (双指针)
  • 什么是出入库管理系统?2025年五大出入库管理软件推荐
  • 部署TOMEXAM
  • (tarjan 缩点)洛谷 P3119 USACO15JAN Grass Cownoisseur G 题解
  • 文章被检测出是AI写的怎么办?