Go基础之map

map 的定义和初始化

map 存储的是键值对的数据

map 也需要申请内存

1
map[KeyType]ValueType
  • KeyType:表示键的类型。
  • ValueType:表示键对应的值的类型。

map 类型的变量默认初始值为 nil,需要使用 make()函数来分配内存。

1
make(map[KeyType]ValueType, [cap])

其中 cap 表示 map 的容量,该参数虽然不是必须的,但是我们应该在初始化 map 的时候就为其指定一个合适的容量。

1
2
3
4
5
6
7
8
9
10
11
# 先声明再初始化填充数据
var m1 map[string]int
// true 初始值为 nil,需要使用 make()函数来分配内存
fmt.Println(m1 == nil)
m1 = make(map[string]int, 2)
m1["张三"] = 90
m1["小明"] = 100
m1["李四"] = 98
fmt.Println(m1)
// 如果key不存在返回的是value对应类型的零值, 这里会打印0
fmt.Println(m1["王五"])
1
2
3
4
5
6
7
# 声明时初始化并填充数据
scoreMap2 := map[string]int{
"张三": 90,
"小明": 100,
"李四": 98,
}
fmt.Println(scoreMap2)

map 的遍历

1
2
3
4
5
6
7
8
scoreMaps := map[string]int{
"张三": 90,
"小明": 100,
"李四": 98,
}
for k, v := range scoreMaps {
fmt.Println(k, v)
}

判断某个键是否存在和删除键值对

1
2
3
4
5
6
7
8
9
10
11
12
var m1 = make(map[string]int)
m1["tom"] = 100
m1["jack"] = 90
score, ok := m1["lucy"]
if !ok {
fmt.Println("没有这个人")
} else {
fmt.Println("lucy的分数是", score)
}
delete(m1["bill"]) // 删除的key不存在什么都不干
delete(m1["tom"])
fmt.Println(m1)

make new 区别

1、makenew 都是用来申请内存的
2、new 很少用,一般用来给基本数据类型申请内存,intstring…,返回的是对应类型的指针
3、make 是用来给 slicemapchan 申请内存的,make 函数的返回值是对应的三个类型本身

学习资料

  1. https://www.bilibili.com/video/BV1fz4y1m7Pm/?p=27
  2. https://www.liwenzhou.com/posts/Go/08_map/

我的环境

  • Mac
  • go1.19
  • GoLand