map主要由键值对(”key = value”)字符串组成。
map的定义:
Map是Go里面的键值对集合,由key-value对组成,给定key,可以快速定位到对应的value。也被称为字典、哈希表等。
map中的key可以是任意能够用==或者!=操作符比较的类型,比如string,int、float等,不能是函数、map、切片;value可以是任意类型
map的声明方式var map变量名 map[key类型]vlaue类型。
可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type

/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)

1、声明一个nil的map类型

package main

import "fmt"

func main() {
	//声明一个map类型的键值对,是nil类型
	var a map[string]int
	fmt.Println(a,a==nil)
	//输出结果  map[] true

2、先声明类型,再给map赋值,使用等号

	//给map类型赋值
	var b =make(map[string]int,8)
	fmt.Println(b,b==nil)
	//输出结果  map[]  false
	b["GO语言"] = 100
	b["GIN框架"] = 200
	fmt.Printf("b的值:%v,类型是:%T\n",b,b)
	//输出结果   b的值:map[GIN框架:200 GO语言:100],类型是:map[string]int
	fmt.Printf("b的值:%#v,类型是:%T\n",b,b)  //加#会显示出更多的输出
	//输出结果:b的值:map[string]int{"GIN框架":200, "GO语言":100},类型是:map[string]int

3、声明后直接赋值,赋值是键值对格式,用冒号

//声明后就赋值
	var c = map[string]int{
		"GO语言" :100 , //注意这里是:不是=
		"GIN框架" :200,   //不加,号  需要把大括号移上来
	}
	fmt.Println(c)
	//输出结果:map[GIN框架:200 GO语言:100]


}

4、判断字段在不在map中

     var d = map[string]int{
     	"GO语言": 100,
     	"GIN框架": 200,
	 }
	 fmt.Println(d)
     value,ok := d["GO语言"]  //语法,判断map中是否存在字段,同时value会变成键值,ok会变成bool类型,
                              // 只有false和true,value和ok是自定义的,格式对即可
     fmt.Println(value,ok)
     //输出:100 true
	if ok {
		fmt.Println("GO语言在map中")
	}else {
		fmt.Println("GO语言不在map中")
	}
	//输出:GO语言在map中
}

5、遍历

	var e = make(map[string]int,8)
	e["GO语言"] =100
	e["GIN框架"] = 200
	fmt.Println(e)
	for value,key := range e{   //全部遍历
	fmt.Println(value,key)
	}
	//输出:GO语言 100 GIN框架 200
	for _,key1 := range e{    //只遍历key值
		fmt.Println(key1)
	}
	//输出:100 200
	for value2 := range e{   //只遍历value值
		fmt.Println(value2)
	}
	//输出:GO语言 GIN框架

6、遍历后排序

 //默认map类型是无序的,现在给一个map类型排序
    //生成50个随机数组给这个map
 	var scoreMap = make(map[string]int,100)
	for i :=0; i<50; i++ {
		key1 := fmt.Sprintf("stu%02d", i)//%02d代表两位数开始,没自增一个数值就赋值给key
		value1 := rand.Intn(100)   //rand.intn函数作用就是随机生成数字给value
		scoreMap[key1] = value1    //由上面两个key和value组成map类型
	}
	//1、生成一个切片,把所有map类型的key值存在到切片keys中
	keys :=make([]string,0,100)
	for k :=range scoreMap{
		keys = append(keys,k)
	}
    //2、给切片keys排序
	sort.Strings(keys)
	fmt.Println(keys)
	//3、把排序完的切片keys,遍历与map类型scoreMap中,并打印出对应于切片keys中的map类型scoreMap的value值
	for _,key2 :=range keys{
		fmt.Println(key2,scoreMap[key2])
	}
	//判断map类型是否存在此值,定义key3
	value,ok := scoreMap["stu49"]
	fmt.Println(value,ok)
	if ok {
		fmt.Println(value,scoreMap["stu49"])
	}else {
		fmt.Println("不存在")
	}

输出结果:

[stu00 stu01 ... stu49]
stu00 81
stu01 87
stu02 47
stu03 59
stu04 81
.
.
.
stu49 53
53 true
53 53

7、删除map中的键值对

	//删除键值对
	var f  = make(map[string]int,8)
	f["GO语言"] = 100
	f["GIN框架"] = 200
	fmt.Println(f)
	//输出:map[GIN框架:200 GO语言:100]
	delete(f,"GIN框架")
	fmt.Println(f)
	//输出:map[GO语言:100]
am
package main

import "fmt"

func main() {

	m := make(map[string]int)
	m["a"] = 1
	_, ok := m["a"]
	fmt.Println(ok)
}
//输出true