Map 是一种无序的键值对的集合。
初始化 Map 可以使用 make 函数,也可以使用字面量的方式直接初始化值。
// 创建一个空的 Map
m1 := make(map[string]int)
// 使用字面量的方式
m2 := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
}
fmt.Println(m1) // map[]
fmt.Println(m2) // map[apple:1 banana:2 orange:3]
使用 Map 名加键名的方式,可以设置一个键值对,如果有值则修改,没有则新建一个键值对。
// 修改原有的值
m2["apple"] = 4
fmt.Println(m2) // map[apple:4 banana:2 orange:3]
// 设置新的值
m2["apple2"] = 5
fmt.Println(m2)// map[apple:4 apple2:5 banana:2 orange:3]
通过键名获取 Map 相对应的键值,获取键值的同时也可以获取键是否存在。
// 直接获取键值
value := m2["apple"]
fmt.Println(value) // 4
// 获取键值,并获取是否存在
value1,ok1 := m2["apple"]
fmt.Println(ok1) // true
fmt.Println(value1) // 4
// 获取键值,并获取是否存在
value2,ok2 := m2["apple3"]
fmt.Println(ok2) // false
fmt.Println(value2) // 0
可以通过 len 函数获取 Map 元素的数量
m3 := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
"apple1": 3,
"apple2": 3,
"apple3": 3,
}
fmt.Println(len(m3)) //6
delete(m3,"apple1")
delete(m3,"apple2")
delete(m3,"apple3")
fmt.Println(m3)// map[apple:1 banana:2 orange:3]
// 清空map
m3 = nil
fmt.Println(m3) // map[]
for k,v := range m3{
fmt.Printf("Key:%s Result:%d\n",k,v)
}
map 和切片一样也是引用类型,如果直接用 = 赋值,两者其实指向的 map 是一样的
m4 := m3
fmt.Println(m4) // map[apple:1 banana:2 orange:3]
m3["apple"] = 10
fmt.Println(m3) // map[apple:10 banana:2 orange:3]
fmt.Println(m4) // map[apple:10 banana:2 orange:3]
可以看到把 m3 赋值给 m4 之后,修改了 m3 的某个key ,m4 也一起改动了