map翻译过来就是字典或者映射,可以把map看做是切片的升级版
切片和map都用来存储一组相同类型的数据
切片通过索引来获取对应元素,索引从0开始递增,但map通过key来获取对应的元素,key需要我们自己指定
只要可以做==、!=判断的数据类型都可以作为key(数值类型、字符串、数组、指针、结构体、接口)
map的key的数据类型不能是:slice、map、function
map和切片一样的容量不固定,容量不足会自动扩容
map格式:var 变量名称 map[key的数据类型]value数据类型
package main
import "fmt"
func main(){
//一创建方式
//1.通过go提供的语法糖快速创建
dict := map[string]string{"name":"xiaomeng","age":333}
//2.通过make函数创建 make(类型,容量)
dict1 = make(map[string]string,3)
dict1["name"]="xiaomeng"
dict1["age"]="333"
//3.通过make函数创建 make(类型)
dict2 = make(map[string]string)
dict2["name"]="xiaomeng"
dict2["age"]="333"
//map的增删改查
//增加 没有指定的key时就会自动增加
dict["ID"]="1111111111"
//修改 map中指定key就会自动修改
dict["name"] = "xiaoli"
//删除 通过go语言内置delete函数删除指定元素
delete(dict,"ID")
//查询 通过ok-idiom模式判断指定键值是否存储
value,ok := dict["age"] //普通写法
if(ok){
fmt.Println("有age",value)
}
if value,ok := dict["age"]; ok{ //正常写法
fmt.Println("有age",value)
}
//map的遍历
for key,value := range dict{
fmt.Println(key,value)
}
//二注意事项
//只定义,没有创建的map不能使用
var dict3 map[string]string
dict3["name"] = "xiaomeng" //编译报错
}