Go语言中map是一种特殊的数据结构,一种元素对(pair)的无序集合,pair对应一个key(索引)和一个value(值),所以这个结构也称为关联数组或字典。这是一种能够快速寻找值的理想机构,给定key,就可以迅速找到对应的value。
map是引用类型,可以使用如下方式声明:
```
var mapname map[keytype]valuetype
```
其中:
* mapname为map的变量名;
* keytype为键类型;
* valuetype是键对应的值类型
提示:[keytype]和valuetype之间允许有空格。
在声明的时候不需要知道map的长度,因为map是可以动态增长的,未初始化的map的值是nil,使用函数len()可以获取map中的pair的数目。
##map容量
和数组不同,map可以根据新增的key-value动态的伸缩,因此它不存在固定长度或者最大限制,但是也可以选择标明map的初始容量capacity,格式如下:
```
make(map[keytype]valuetype, cap)
```
当map增长到容量上限的时候,若再增加新的key-value,map的大小会自动加1,所以出于性能的考虑,对于大的map或者快速扩张的map,即使只是大概知道容量,也最好先标明。
##用切片作为map的值
既然一个key只能对应一个value,而value又是一个原始类型,那么若是一个key要对应多个值咋办?例如,当我们要处理unix机器上的所有进程,以父进程(pid为整型)作为key,所有的子进程(以所有子进程的pid组成的切片)作为value。通过将value定义为[]int类型或者其他类型的切片,就可以优雅解决该问题,如下:
```
map1 := make(map[int][]int)
map2 := make(map[int]*[]int)
```
##map元素的删除和清空
###使用delete()函数从map中删除键值对
```
delete(map, 键)
```
###清空map中的所有元素
Go语言中并没有为map提供任何清空所有元素定函数、方法。清空map的唯一方式就是重新make一个新的map。不用担心垃圾回收的效率,Go语言中的并行垃圾回收效率比写一个清空函数要高效很多。
- 1.Go语言前景
- 2.Go语言环境搭建
- 3.Go语言的基本语法
- 3.1变量
- 3.1.1变量声明
- 3.1.2变量初始化
- 3.1.3多个变量同时赋值
- 3.1.4匿名变量
- 3.1.5变量的作用域
- 3.1.6整型
- 3.1.7浮点类型
- 3.1.8复数
- 3.1.9bool类型
- 3.1.10字符串
- 3.1.11字符类型
- 3.1.12类型转换
- 3.2常量
- 3.1.1const关键字
- 3.2.2模拟枚举
- 4.Go语言的流程控制
- 4.2循环结构
- 4.3键值循环
- 4.4switch语句
- 4.5goto语句
- 4.6break语句
- 4.7continue语句
- 5.Go语言的函数
- 5.1函数声明
- 5.2函数变量
- 5.3函数类型实现接口
- 5.4闭包
- 5.5可变参数
- 5.6defer(延迟执行语句)
- 5.7处理运行时错误
- 5.8宕机(panic)
- 5.9宕机恢复(recover)
- 5.10Test功能测试函数
- 6.Go语言的内置容器
- 6.1数组
- 6.2切片
- 6.3map
- 6.4sync.Map
- 6.5list
- 6.6range
- 7.Go语言的结构体
- 8.Go语言的接口
- 9.Go语言的常用内置包
- 10.Go语言的并发
- 11.Go语言的文件I/O操作
- 12.Go语言的网络编程
- 13.Go语言的反射
- 14.Go语言的数据库编程
- 15.Go语言密码学算法
- 16.Go语言的gin框架
- 17.Go语言的网络爬虫
- 18.Go语言的编译和工具链