Golang语言特点与技巧(四) | 青训营笔记

95 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第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将一些库进行导入。