概述
Go语言中的 映射(map)是一种内置的数据结构,是一个用于存储一系列无序的键值对的集合。
映射里基于键来存储值,键就像索引一样,指向与该键关联的值。
创建和初始化
1. 使用内置函数 make() 声明映射
map_variable := make(map[key_data_type]value_data_type)
// 创建一个映射,键的类型是string,值的类型是int
dict := make(map[string]int)
2. 使用映射字面量声明映射
// 创建一个映射,键和值的类型都是string
// 使用两个键值对初始化映射
dict := map[string]string{"Red": "#da1337", "Orange": "#e95a22"}
使用映射
1. 为映射赋值
键值对赋值给映射,是通过指定适当类型的键并给这个键赋一个值来完成的。
// 创建一个空映射,用来存储颜色以及颜色对应的十六进制代码
colors := map[string]string{}
// 将Red的代码加入到映射
colors["Red"] = "#da1337"
2. 对 nil 映射赋值运行会报错
// 通过声明映射创建一个 nil 映射
var colors map[string]string
// 将 Red 的代码加入到映射
colors["Red"] = "#da1337"
Runtime Error:
panic: runtime error: assignment to entry in nil map
3. 从映射获取值并判断键是否存在
// 获取键 Blue 对应的值
value, exists := colors["Blue"]
// 这个键存在吗?
if exists {
fmt.Println(value)
}
4. 从映射获取值,并通过该值判断键是否存在
// 获取键 Blue 对应的值
value := colors["Blue"]
// 这个键存在吗?
if value != "" {
fmt.Println(value)
}
5. 使用 range 迭代映射
// 创建一个映射,存储颜色以及颜色对应的十六进制
colors := map[string]string{
"AliceBlue": "#f0f8ff",
"Coral": "#ff7F50",
"DarkGray": "#a9a9a9",
"ForestGreen": "#228b22"
}
// 显示映射里的所有颜色
for key, value := range colors {
fmt.Printf("key: %s Value: %s\n", key, value)
}
6. 从映射中删除一项
// 删除键为 Coral 的键值对
delete(colors, "Coral")
// 显示映射里的所有颜色
for key, value := range colors {
fmt.Printf("key: %s Value: %s\n", key, value)
}
在函数间传递映射
在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递映射给一个函数,并对这个映射做了修改时,所有对这个映射对引用都会擦觉到这个修改。