学名:映射关系容器。

俗名:键值对 key-value

map跟slice一样,依然是一个引用类型。

map

1. C#中的字典

根据map的特点,博主类比的是 C# 中字典 Dictionary ,同样都是键值对。

//定义 初始化
Dictionary<int, string> dic = new Dictionary<int, string>
{

    {1,"学生"},
    {2,"老师"},
    {3,"家长"}

}; 

//新增
dic. Add(4, "校长"); 

//判断是否含key
if (dic. ContainsKey(1))
{

}

//判断是否含value
if (dic. ContainsValue("学生")) { }

//遍历字典
foreach (KeyValuePair<int, string> kv in dic)
{

}
//删除指定key的元素
dic. Remove(1); 

//清空字典
dic. Clear(); 

2.Golang中的map

2.1 定义 初始化

make(map[KeyType]ValueType, [cap]),cap可选

testMap := make(map[int]string, 3)
testMap[1] = "学生"
testMap[2] = "老师"
testMap[3] = "家长"
fmt.Println(testMap)
map[1:学生 2:老师 3:家长]

2.2 遍历

使用 for k,v:=range map{} 遍历:

//遍历
for k, v := range testMap {
    fmt.Println(k, v)
}
1 学生
2 老师
3 家长

2.3 删除

删除,使用内置函数 delete()

func delete(m map[Key]Type, key Key)
//删除
delete(testMap, 1)

for k, v := range testMap {
    fmt.Println(k, v)
}
3 家长
2 老师

2.4 重点来了

切片是一种类型,且使用频繁,切片就也能作为 map 的值 value

var mapValueSlice = make(map[string][]string, 3)
var sc []string
sc = append(sc, "成都", "绵阳", "宜宾")
var sx = []string{"西安", "汉中", "榆林"}
mapValueSlice["四川"] = sc
mapValueSlice["陕西"] = sx
fmt.Println(mapValueSlice)
map[四川:[成都 绵阳 宜宾] 陕西:[西安 汉中 榆林]]

最后说一下,golang的源码读懂需要基础语法很牢固,后面的函数,方法接收者,指针,参数,返回值,通道等等,远远一看,中括号 [] 横飞, * ,其实万变不离其宗,都是这些基础类型按照语义组合而成。

再次强调:这个系列并不是教程,如果想系统的学习,博主可推荐学习资源。