在 Go 语言(Golang)中,Map 是一种内置的数据结构,它存储了一组键值对(Key-Value pairs)。Map 的键(Key)必须是支持相等性比较的类型(如整型、字符串、结构体等),而值(Value)则可以是任意类型。Map 提供了快速查找、插入和删除键值对的能力,是一种非常高效的数据结构。
Map 可以通过以下方式声明:
map[KeyType]ValueType
其中,KeyType
是键的类型,ValueType
是值的类型。
例如,声明一个存储字符串键和整型值的 Map:
ages := make(map[string]int)
或者,使用字面量直接初始化:
ages := map[string]int{
"Alice": 30,
"Bob": 25,
"Charlie": 35,
}
使用 =
操作符给 Map 赋值时,如果键已经存在,则更新对应的值;如果键不存在,则添加新的键值对。
ages["Dave"] = 40
通过键来访问 Map 中的值。如果键不存在,则返回一个值类型的零值。对于整型,零值是 0
;对于字符串,零值是空字符串 ""
;等等。
age := ages["Alice"] // 返回 30
ageOfDave := ages["Dave"] // 返回 40
ageOfEve := ages["Eve"] // 返回 0,因为 "Eve" 不在 Map 中
在 Go 中,通常使用两个步骤来检查键是否存在:首先尝试访问键对应的值,然后使用额外的逻辑(如与零值比较)来判断键是否真的存在。但从 Go 1.18 开始,可以使用 map
访问的逗号操作符来获取值和一个布尔值,该布尔值指示键是否存在于 Map 中。
if age, ok := ages["Alice"]; ok {
fmt.Println("Age:", age)
} else {
fmt.Println("Key 'Alice' does not exist.")
}
使用内置的 delete
函数来删除 Map 中的键值对。如果键不存在,delete
函数不会报错。
delete(ages, "Bob")
使用 for range
循环来遍历 Map。遍历的顺序在 Go 中是不确定的,且每次运行都可能不同。
for key, value := range ages {
fmt.Println("Key:", key, "Value:", value)
}
nil
。未初始化的 Map 是 nil
,且不能用于存储键值对。在使用前,你需要通过 make
函数或字面量来初始化它。len
函数来获取,但该函数返回的是键值对的数量,而不是 Map 分配的内存大小。sync.Map
或其他同步机制来保护对 Map 的访问。上一篇: Golang 语言范围(Range)
下一篇: Golang 语言递归函数