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語言的編譯和工具鏈