> 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 快捷键