sync.Map详解
sync.Map是1.9才推荐的并发安全的map。
package main
import (
"fmt"
"sync"
)
func main() {
var sm sync.Map
//Store函数添加元素
sm.Store(1, "a")
//Load函数获得value
if v, ok := sm.Load(1); ok {
fmt.Println(v)
}
/*
LoadOrStore函数获取或者添加。
参数是key,value。
如果该key存在且没有被标记删除则返回原先的value(不更新)和true。
不存在则store,返回该value 和false。
*/
if v, ok := sm.LoadOrStore(1, "b"); ok {
fmt.Println(v)
}
if v, ok := sm.LoadOrStore(2, "c"); !ok {
fmt.Println(v)
}
//删除
sm.Delete(1)
//遍历,参数为函数。函数参数为key value返回值为bool,荡返回false遍历停止
sm.Range(func(k, v interface{}) bool {
fmt.Printf("key=%d,value=%s\n", k, v)
return true
})
//sync.map暂时不支持len参数,获取长度需要遍历,比较复杂。
// fmt.Println(len(sm))
}
