Golang 地图简介 - Go 地图
最编程
2024-10-17 20:18:35
...
Map 简介
在Go语言中提供了map数据结构来存储键值对数据。map的数据类型为map[K]V
,其中K为键的类型,V为值的类型。map的键类型必须支持==
操作符,用来比较两个键是否相等。Go语言提供了4种内置的map操作: len
、delete
、comparison
、assign
。
Map 定义
map_var := make(map[K]V) // 用make函数创建一个空的map,其中K和V分别为键和值的类型
map_var[key] = value // 向map中添加一个键值对
value := map_var[key] // 获取指定键的值
delete(map_var, key) // 从map中删除指定的键及其对应的值
Map Iteration
Go语言提供了两个方法来遍历map中的所有键值对,分别是range
方法和Len()
方法。
// 使用range循环遍历map中的所有键值对
for key, value := range map_var {
// TODO ...
}
// 计算map中的元素数量
if len(map_var) > 0 {
// TODO ...
}
Map 的线程安全
在Go语言中,map是非线程安全的,在多线程并发访问时可能导致程序报错。当map被多个协程同时访问时,我们需要使用sync包中的sync.Mutex
来确保操作的原子性和并发安全。
import "sync"
type SafeMap struct {
mu sync.Mutex
m map[string]int
}
func (sm *SafeMap) Get(key string) int {
sm.mu.Lock()
defer sm.mu.Unlock()
return sm.m[key]
}
func (sm *SafeMap) Set(key string, value int) {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.m[key] = value
}
func (sm *SafeMap) Delete(key string) {
sm.mu.Lock()
defer sm.mu.Unlock()
delete(sm.m, key)
}