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

《Go语言圣经》map

《Go语言圣经》map

禁止取址

  • 禁止取址:map 中的元素不是变量,无法进行取址操作(如 &ages["bob"])。因为 map 可能随元素增加重新分配内存,导致地址失效。

nil map

  • 向 nil map 存入元素会触发 panic(如 ages["carol"] = 21),因此必须先使用 make() 创建 map。

存在性检查

  • map 的下标语法可返回两个值(如 age, ok := ages["bob"]),第二个布尔值 ok 用于判断元素是否存在,常用于条件判断。

实现集合(Set)

  • Go 语言没有内置 Set 类型,但可用 map[string]bool 替代。通过键的唯一性去重,例如 dedup 程序通过 seen[line] = true 标记已存在的行。
func main() {seen := make(map[string]bool) // a set of stringsinput := bufio.NewScanner(os.Stdin)for input.Scan() {line := input.Text()if !seen[line] {seen[line] = truefmt.Println(line)}}if err := input.Err(); err != nil {fmt.Fprintf(os.Stderr, "dedup: %v\n", err)os.Exit(1)}
}

嵌套 map

  • Map的value类型也可以是一个聚合类型,比如是一个map或slice。在下面的代码中,graph 这个 map 的key类型是一个字符串,value类型map[string]bool代表一个字符串集合。从概念上讲,graph将一个字符串类型的key映射到一组相关的字符串集合,它们指向新的graph的key。
  • 其中addEdge函数惰性初始化map是一个惯用方式,也就是说在每个值首次作为key时才初始化。hasEdge函数显示了如何让map的零值也能正常工作;即使from到to的边不存在,graph[from][to]依然可以返回一个有意义的结果。
var graph = make(map[string]map[string]bool)
func addEdge(from, to string) {edges := graph[from]if edges == nil {edges = make(map[string]bool)graph[from] = edges}edges[to] = true
}
func hasEdge(from, to string)bool {return graph[from][to]
}

相关文章:

  • F接口基础.go
  • 基于Spring Boot的计算机考研交流系统的设计与实现
  • 微信小程序canvas实现抽奖动画
  • Arduino Nano 33 BLE Sense Rev 2开发板使用指南之【环境搭建 / 点灯】
  • 视频续播功能实现 - 断点续看从前端到 Spring Boot 后端
  • IDE深度集成+实时反馈:企业级软件测试方案Parasoft如何重塑汽车巨头的测试流程
  • MyBatis原理剖析(三)--加载配置文件
  • shared_ptr 源码解析
  • 安卓vscodeAI开发实例
  • 【MySQL基础】MySQL内置函数全面解析:提升你的数据库操作效率
  • GVim-vimrc 字体缩放与界面优化配置
  • 一拖广角云台(一种广角镜头与云台相结合的监控设备)实现了动态追踪和预警功能
  • 开源ChatBI :深入解密 Spring AI Alibaba 的中文NL2SQL智能引擎
  • 门锁开关;与我们生活中紧密联系!
  • 前端vue js 使用插件 spark-md5 计算文件MD5值并封装成Promise异步调用方法
  • 小型语言模型(SLMs)有望重塑自主AI:效率、成本与实际部署
  • 深入探索 OpenCV 图像识别:从基础到深度学习
  • AI面试系统选型HR应考虑哪些问题?
  • JVM(7)——详解标记-整理算法
  • 安全工具:testssl.sh
  • 如何做阿里巴巴的网站首页/国际站seo优化是什么意思
  • 用php做电子商务网站/今日国内新闻最新消息
  • go搭建网站/免费网站入口在哪
  • 湖北网站建设怎样/中国50强企业管理培训机构
  • 淄博网站建设培训学校/seo诊断站长
  • 做企业网站安装什么系统好/百度搜索引擎网站