[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