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

go语言学习 第9章:映射(Map)

第9章:映射(Map)

在Go语言中,映射(Map)是一种键值对集合,它允许你通过键来快速查找对应的值。映射是一种非常灵活且强大的数据结构,适用于存储和检索非连续的、无序的数据。本章将详细介绍映射的定义、初始化、操作以及一些高级用法。

一、映射的定义与初始化

(一)定义映射

在Go语言中,映射的定义格式如下:

var 映射名 map[键类型]值类型

例如,定义一个字符串到整数的映射:

var scores map[string]int

(二)初始化映射

映射可以通过make函数初始化,也可以在定义时直接初始化。

1. 使用make函数初始化

make函数用于初始化映射,它接受两个参数:映射的初始大小(可选)。例如:

scores := make(map[string]int)
2. 直接初始化

可以直接通过花括号初始化映射。例如:

scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,
}

(三)映射的长度

可以使用内置函数len来获取映射的长度。例如:

package mainimport "fmt"func main() {scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,}fmt.Println("映射的长度为:", len(scores))
}

二、映射的操作

(一)访问映射元素

通过键来访问映射中的值。例如:

package mainimport "fmt"func main() {scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,}fmt.Println("Alice的分数:", scores["Alice"])
}

(二)修改映射元素

通过键来修改映射中的值。例如:

package mainimport "fmt"func main() {scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,}scores["Alice"] = 100 // 修改Alice的分数fmt.Println("修改后的映射:", scores)
}

(三)添加元素到映射

通过键来添加新的键值对。例如:

package mainimport "fmt"func main() {scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,}scores["David"] = 92 // 添加一个新的键值对fmt.Println("添加后的映射:", scores)
}

(四)删除映射元素

可以使用delete函数来删除映射中的键值对。例如:

package mainimport "fmt"func main() {scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,}delete(scores, "Bob") // 删除Bob的键值对fmt.Println("删除后的映射:", scores)
}

(五)检查键是否存在

可以通过返回两个值的方式来检查键是否存在。例如:

package mainimport "fmt"func main() {scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,}score, exists := scores["Bob"]if exists {fmt.Println("Bob的分数:", score)} else {fmt.Println("Bob的分数不存在")}
}

三、映射的遍历

(一)使用for-range循环遍历

可以使用for-range循环来遍历映射。例如:

package mainimport "fmt"func main() {scores := map[string]int{"Alice": 95,"Bob":   88,"Charlie": 78,}for key, value := range scores {fmt.Println("键:", key, "值:", value)}
}

四、映射的高级用法

(一)映射的映射

可以创建嵌套的映射结构。例如:

package mainimport "fmt"func main() {students := map[string]map[string]int{"class1": {"Alice": 95,"Bob":   88,},"class2": {"Charlie": 78,"David":   92,},}fmt.Println("class1的Alice分数:", students["class1"]["Alice"])
}

(二)映射的并发访问

在并发环境中访问映射时,需要使用互斥锁(sync.Mutex)来保证线程安全。例如:

package mainimport ("fmt""sync"
)func main() {var scores map[string]intvar mutex sync.Mutexscores = make(map[string]int)go func() {mutex.Lock()scores["Alice"] = 95mutex.Unlock()}()go func() {mutex.Lock()scores["Bob"] = 88mutex.Unlock()}()// 等待所有goroutine完成fmt.Println("映射内容:", scores)
}

五、总结

本章详细介绍了Go语言中映射的定义、初始化、操作以及一些高级用法。映射是一种非常灵活且强大的数据结构,适用于存储和检索非连续的、无序的数据。通过合理使用映射,可以实现高效的键值对存储和检索。

在实际开发中,映射的使用非常广泛,从简单的配置管理到复杂的业务逻辑,都可以看到映射的身影。掌握映射的使用方法对于编写高效、可读性强的代码至关重要。

在接下来的章节中,我们将继续深入学习Go语言的其他特性,如面向对象编程、并发编程等。希望读者能够通过这些内容更好地掌握Go语言,提升编程技能。

相关文章:

  • 数论总结,(模版与题解)
  • csrf攻击学习
  • PL0语法,分析器实现!
  • AIGC行业发展演进:从技术萌芽到智能革命
  • 0基础破解Typora,使用正版已激活Typora
  • 将数据库表导出为C#实体对象
  • Docke启动Ktransformers部署Qwen3MOE模型实战与性能测试
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
  • 快速上手shell脚本运行流程控制
  • 1-2 Linux-虚拟机(2025.6.7学习篇- win版本)
  • 投屏技术深度解析:从原理到成功率优化实战·优雅草卓伊凡
  • Java Map完全指南:从基础到高级应用
  • 【LRU】 (最近最少使用)
  • 绘制饼图详细过程
  • 60天python训练计划----day46 and day47
  • 利用qcustomplot绘制曲线图
  • [yolov11改进系列]基于yolov11使用CPA-Enhancer自适应增强器替换backbone提高低照度目标的python源码+训练源码
  • 【C/C++】algorithm清单以及适用场景
  • Ntfs!NtfsWriteLog函数分析之ntfs!NTFS_LOG_RECORD_HEADER结构的一个例子----NTFS源代码分析之七
  • leetcode刷题日记——1.组合总和
  • 谷歌推广公司/西安做seo的公司
  • wordpress邮件设置方法/厦门seo培训
  • 济南市建设局网站/深圳百度推广公司
  • 网站将要准备建设的内容有哪些/游戏推广代理app
  • 创新的成都 网站建设/南京网站设计公司大全
  • 免费在线网站建设/关键词排名怎么快速上去