Golang学习笔记_13——数组
Golang学习笔记_14——切片
Golang学习笔记_15——range
文章目录
Map
1. 介绍
在Go语言中,map
是一种内置的数据结构,用于存储键值对(key-value pairs)。map
提供了快速的查找、插入和删除操作,使得它在处理需要快速访问的数据时非常高效。
2. 声明和初始化
// 声明未初始化的map
var myMap map[string]int
// 使用 make 函数初始化
myMap := make(map[string]int)
// 使用字面量初始化
myMap := map[string]int{
"Alice": 30,
"Bob": 25,
}
3. 类型
map
的键和值可以是任意类型(除了函数类型、map类型和切片类型的值不能作为键)。
键必须是可比较的(即可以使用 ==
或 !=
操作符比较的类型)。
常见的键类型包括整数、浮点数、字符串、布尔值等
值类型则可以是任意类型
4. 基本操作
4.1 插入更新
myMap["Tom"] = 25
myMap["Bob"] = 100
4.2 访问值
value, exists := myMap["Alice"]
if exists {
fmt.Println("Alice's age is", value)
} else {
fmt.Println("Alice's age is not found")
}
输出结果
Alice's age is 30
4.3 删除
delete(myMap, "Bob")
4.4 遍历
for key, value := range myMap {
fmt.Println(key, value)
}
遍历 map
的顺序是随机的,因为 map
不保证键值对的存储顺序
5. 注意事项
- 并发访问:
map
不是并发安全的,即多个协程(goroutine)不能同时读写同一个map
。如果需要在多个协程之间共享map
,应该使用sync.Map
或通过其他同步机制(如互斥锁)来保护对map
的访问。 - 容量:
map
在Go语言中会自动扩展容量,程序员无需手动管理。然而,这并不意味着可以无限制地向map
中添加元素,当map
变得非常大时,性能可能会受到影响。 - nil map:
未初始化的map
是nil
,对其进行任何操作(如插入、查找、删除)都会导致运行时错误。因此,在使用map
前必须确保它已被初始化。
6. 示例
func map_demo() {
// 初始化 map
myMap := make(map[string]int)
// 插入键值对
myMap["Alice"] = 30
myMap["Bob"] = 25
// 访问值
age, exists := myMap["Alice"]
if exists {
fmt.Println("Alice's age is", age)
} else {
fmt.Println("Alice's age is not found")
}
// 更新键值对
myMap["Alice"] = 31
// 删除键值对
delete(myMap, "Bob")
// 遍历 map
for key, value := range myMap {
fmt.Println(key, value)
}
// 使用字面量初始化 map
anotherMap := map[string]string{
"name": "Charlie",
"city": "New York",
}
// 访问 anotherMap 的值
fmt.Println("Name:", anotherMap["name"])
fmt.Println("City:", anotherMap["city"])
}
测试方法
func Test_map_demo(t *testing.T) {
map_demo()
}
输出结果
=== RUN Test_map_demo
Alice's age is 30
Alice 31
Name: Charlie
City: New York
--- PASS: Test_map_demo (0.00s)
PASS
标签:Map,map,fmt,16,Alice,Golang,Println,myMap,age
From: https://blog.csdn.net/LuckyLay/article/details/144621110