> map類型是一種鍵值(key/value)存儲的哈希數據結構,讀寫數據都是通過key進行操作
[TOC]
## 定義map類型
> map類型語法
```
var m map[key類型]value類型
```
> 例子
```
// key是字符串類型,value是int類型
var m1 map[string]int
// key是字符串類型,value是string類型
var m2 map[string]string
// key是字符串類型,value是User結構體類型
var m3 map[string]User
// key是字符串類型,value是interface{}類型
var m4 map[string]interface{}
```
## map變量默認值
> 沒有初始化的map變量,默認值是nil
~~~
var m1 map[string]int
if m1 == nil {
fmt.Println("is nil")
}
fmt.Println(m1)
~~~
## 初始化map
> map必須要先初始化才能使用 (讀寫key)
> 語法
```
myMap := make(map[key類型]value類型)
或者
myMap := map[key類型]value類型{}
```
> 例子
```
// 定義一個map
var m1 map[string]int
// 初始化map 1111
m1 = make(map[string]int)
// 初始化map 2222
m := map[string]string{}
//m := map[string]string{"name":"wk", "age":"28"}
```
> 也可通過短變量聲明符快速初始化
```
m := make(map[string]string)
```
## 讀寫數據
```
package main
import "fmt"
func main() {
// 定義并初始化map
m1 := map[string]int{}
// 保存一個鍵值對,將key = tizi的值設置為100
m1["tizi"] = 100
// 讀取key = tizi 的值, 這里得到的值是100
v := m1["tizi"]
fmt.Println(v)
}
```
## 判斷key是否存在
> 語法:第一個返回值elem是key的值,第二個返回值ok表示key是否存在
```
elem, ok = m[key]
```
> 例子
~~~
package main
import "fmt"
func main() {
// 定義并初始化map,其中key=>val (類型為interface{},可為任意類型)
m := map[string]interface{}{"name":"wk"}
m["age"] = 28
m["super_rich"] = true
v, ok := m["name"]
// 判斷key是否存在
if ok {
fmt.Println("key存在, 值等于", v)
} else {
fmt.Print("key不存在!")
}
}
~~~
## 刪除數據
> 語法
```
// 刪除map中的指定key的數據
delete(m, key)
```
> 例子
~~~
package main
import "fmt"
func main() {
// 定義并初始化map
m1 := map[string]string{}
m1["name"] = "wangkun"
fmt.Println(m1)
// 刪除key=name的數據
delete(m1, "name")
fmt.Println(m1)
}
~~~
- 基礎知識
- 開發環境
- 包名規則
- 包初始化 (init)
- 基礎數據類型
- 基礎類型轉換
- 格式化輸出
- go指針
- 流程控制語句
- 函數定義
- 匿名函數
- 數組和切片
- map集合
- 結構體
- Interface接口
- 日期處理
- 數學計算
- 正則表達式
- 協程 (并發處理)
- channel
- waitgroup
- mutex (鎖機制)
- websocket
- protobuf
- Redis
- 錯誤處理
- 打包程序
- NSQ消息隊列
- 單元測試
- beego
- 安裝入門
- Gin
- 快速入門
- 路由與控制器
- 處理請求參數
- 表單驗證
- 處理響應結果
- 渲染HTML模版
- 訪問靜態文件
- Gin中間件
- Cookie處理
- Session處理
- Gin上傳文件
- swagger
- pprof性能測試
- GORM
- 入門教程
- 模型定義
- 數據庫連接
- 插入數據
- 查詢數據
- 更新數據
- 刪除數據
- 事務處理
- 關聯查詢
- 屬于 (BELONG TO)
- 一對一 (Has One)
- 一對多 (Has Many)
- 多對多 (Many to Many)
- 預加載 (Preloading)
- 錯誤處理
- 第三方常用插件
- viper 讀取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷鍵