[TOC]
map是一種 **無序** 的基于 **key-value** 的數據結構,Go語言中的map是 **引用** 類型,必須初始化才能使用。
Golang語法map定義語法:
```go
map[keyType]valueType
```
## map定義
```go
// 方法一
var m1 = map[string]string{
"name": "jiaxzeng",
"age": "18",
}
fmt.Printf("m1: %v\n", m1)
// 簡單聲明
m2 := map[string]string{
"name": "jiaxzeng",
"age": "18",
}
fmt.Printf("m2: %v\n", m2)
// 方法二
var m3 = make(map[string]string)
m3["name"] = "jiaxzeng"
m3["age"] = "18"
fmt.Printf("m3: %v\n", m3)
// 簡單聲明
m4 := make(map[string]string)
m4["name"] = "jiaxzeng"
m4["age"] = "18"
fmt.Printf("m4: %v\n", m4)
```
## 遍歷map
```go
m5 := make(map[string]string)
m5["name"] = "jiaxzeng"
m5["gender"] = "male"
m5["nationality"] = "China"
for key, value := range m5 {
fmt.Printf("%s: %s\n", key, value)
}
// 運行結果:
// name: jiaxzeng
// gender: male
// nationality: China
```
## 判斷map中某個鍵值是否存在
>[info] map根據鍵取值,有兩個返回值。分別是鍵的值及是否存在。第二參數返回的布爾值。
```go
value, ok := m5["names"]
if ok == false {
fmt.Println("The key does not exist")
} else {
fmt.Printf("value: %v\n", value)
}
```
## map增加鍵
```go
// 增加key
m5["age"] = "22"
fmt.Printf("m5: %v\n", m5)
```
## map刪除鍵
使用delete()內建函數從map中刪除一組鍵值對
```go
delete(m5, "name")
fmt.Printf("m5: %v\n", m5)
```
## map常用的類型
map常用的類型
- map[string]string :key和value都是字符串
- map[string][]Type :key是字符串,value是切片
- []map[string]string : 切片的元素是映射map
### map[string]string
上面的示例都是 map[string]string 這里不演示了,請參考上面的例子即可。
### map[string][]Type
```go
m6 := make(map[string][]string)
m6["廣東"] = []string{"廣州", "深圳", "珠海"}
m6["山東"] = []string{"濟南", "淄博", "青島"}
for province, citys := range m6 {
fmt.Printf("%s: ", province)
for i, city := range citys {
if i == len(citys)-1 {
fmt.Printf("%v", city)
} else {
fmt.Printf("%v、", city)
}
}
fmt.Println("")
}
// 運行結果:
// 廣東: 廣州、深圳、珠海
// 山東: 濟南、淄博、青島
```
### []map[string]string
```go
// []map[string]string
a1 := make([]map[string]string, 2, 5)
a1[0] = map[string]string{
"name": "jiaxzeng",
"gender": "male",
"nationality": "China",
}
a1[1] = map[string]string{
"name": "xiaodunan",
"gender": "female",
"nationality": "China",
}
for _, v := range a1 {
fmt.Println(v)
}
// 運行結果:
// map[gender:male name:jiaxzeng nationality:China]
// map[gender:female name:xiaodunan nationality:China]
```
- Golang簡介
- 開發環境
- Golang安裝
- 編輯器及快捷鍵
- vscode插件
- 第一個程序
- 基礎數據類型
- 變量及匿名變量
- 常量與iota
- 整型與浮點型
- 復數與布爾值
- 字符串
- 運算符
- 算術運算符
- 關系運算符
- 邏輯運算符
- 位運算符
- 賦值運算符
- 流程控制語句
- 獲取用戶輸入
- if分支語句
- for循環語句
- switch語句
- break_continue_goto語法
- 高階數據類型
- pointer指針
- array數組
- slice切片
- slice切片擴展
- map映射
- 函數
- 函數定義和調用
- 函數參數
- 函數返回值
- 作用域
- 函數形參傳遞
- 匿名函數
- 高階函數
- 閉包
- defer語句
- 內置函數
- fmt
- strconv
- strings
- time
- os
- io
- 文件操作
- 編碼
- 字符與字節
- 字符串
- 讀寫文件
- 結構體
- 類型別名和自定義類型
- 結構體聲明
- 結構體實例化
- 模擬構造函數
- 方法接收器
- 匿名字段
- 嵌套與繼承
- 序列化
- 接口
- 接口類型
- 值接收者和指針接收者
- 類型與接口對應關系
- 空接口
- 接口值
- 類型斷言
- 并發編程
- 基本概念
- goroutine
- channel
- select
- 并發安全
- 練習題
- 第三方庫
- Survey
- cobra