由于 map 默认不是并发安全的,所以需要一个 sync.Mutex 互斥量来保护 map 的访问。
var (
// 一个演示用的字典
valueByKey = make(map[string]int)
// 保证使用字典时的并发安全的互斥锁
valueByKeyGuard sync.Mutex
)
// 根据键读取值
func readValue(key string) int {
// 对共享资源加锁
valueByKeyGuard.Lock()
// 取值
v := valueByKey[key]
// 对共享资源解锁
valueByKeyGuard.Unlock()
// 返回值
return v
}
使用defer优化本函数
var (
valueByKey = make(map[string]int)
valueByKeyGuard sync.Mutex
)
// 根据键读取值
func readValue(key string) int {
valueByKeyGuard.Lock()
// defer 后面的语句不会马上调用, 而是延迟到函数return时调用
defer valueByKeyGuard.Unlock()
return valueByKey[key]
}