这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
上一篇的内容地址为:juejin.cn/post/710602…
五、Map
map是一种用来快速查找的数据结构,与c++中的unordered_map以及python中的dict相似。其一个key值对应一个value,通过提供的key能够快速查询到对应的value。
(1) 声明与初始化
map是一个引用类型,可以使用如下的方式进行初始化:
//var mapName map[keytype]valuetype
var myMap map[string]int
//一定要用make而不是new
myMap2 := make(map[string]int)
myMap2["LeafCCC"] = 2
//初始化并赋初值
myMap3 := map[string]int{"LeafCCC":3}
和数组不同,map 可以根据新增的 key-value 对动态的伸缩,因此它不存在固定长度或者最大限制。但是我们也可以选择标明 map 的初始容量 capacity,比如说这样声明一个map:make(map[keytype]valuetype, cap)。
此外,如果我们想用让一个key去对应多个value,我们可以让value类型是切片即可:
var mutiMap = make(map[int][]int)
(2) map操作
判断一个key值如何存在,我们可以这么写,其中存在时ok返回true:
if _, ok := map1[key1]; ok {
// ...
}
要删除某个key以及其对应的value时,使用delete即可:
delete(map1, key1)
当我们要遍历一个map时,我们可以使用经典的for-range结构:
for key, value := range map1 {
fmt.Println(key)
fmt.Println(value)
}
当然,我们也可以选择忽略掉key,或者value:
for _, value := range map1 {
fmt.Println(value)
}
for key, _ := range map1 {
fmt.Println(key)
}
(3)map的一些其他操作
由于map中key和value是无序的,如果我们想要对其进行排序,需要将其先写入一个slice中,再sort进行排序。
如果希望调换一个map的key与value,我们可以声明一个新的map,然后for-range遍历然后写入即可。
六、go mod
在最新的go版本中,都建议使用go install进行包的安装,这样便需要用到我们的go mod。对于一个新的仓库,我们可以这样进行初始化:
go mod init module_name
当我们git clone或者git pull别人的项目时,需要使用go mod tidy将一些库进行导入。