学名:映射关系容器。

俗名:键值对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的源码读懂需要基础语法很牢固,后面的函数,方法接收者,指针,参数,返回值,通道等等,远远一看,中括号[]横飞,*,其实万变不离其宗,都是这些基础类型按照语义组合而成。

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