Go 语言中提供的 map 是协程不安全的,所以在进行并发读写时往往需要加锁,单效率并不高。为了解决这个问题,Go 语言在 1.9 版本中提供了一个效率较高的并发安全的 sync.Map。sync.Map 与 map 不同,并不是以语言原生状态提供的,而是在 sync 包下的一个特殊结构。
    sync.Map 主要有一下几点特性:

    1. 无需初始化,声明即可用;
    2. sync.Map 不能使用 map 的形式进行取值和赋值操作,而是通过 sync.Map 提供的 Store、Load 和 Delete 方法操作;
    3. 遍历 sync.Map 需使用其自身提供的 Range 方法,并传入一个类型为 func(interface{}, interface{}) bool 的回调函数。函数返回 true 则继续遍历,返回 false 则跳出遍历; ```go package main

    import ( “fmt” “sync” )

    func main() { var syncMap sync.Map syncMap.Store(“key1”, “value1”) syncMap.Store(“key2”, “value2”) syncMap.Store(“key3”, “value3”)

    1. fmt.Println(syncMap.Load("key1"))
    2. syncMap.Delete("key1")
    3. if v, ok := syncMap.Load("key1"); ok {
    4. fmt.Println(v)
    5. }
    6. rangeFunc := func(k, v interface{}) bool {
    7. fmt.Println(k, ":", v)
    8. return true
    9. }
    10. syncMap.Range(rangeFunc)

    } ``` image.png