当前位置: 代码迷 >> 综合 >> [Golang] 关于Sync.Map的使用
  详细解决方案

[Golang] 关于Sync.Map的使用

热度:2   发布时间:2024-01-11 18:19:15.0

简介:

sync.Map这个数据结构是线程安全的(基本类型Map结构体在并发读写时会panic严重错误),它填补了Map线程不安全的缺陷,不过最好只在需要的情况下使用。它一般用于并发模型中对同一类map结构体的读写,或其他适用于sync.Map的情况。

关于sync.Map的源码解析文章:Go 1.9 sync.Map揭秘

正文:

它主要五个方法及其功能简介:

1、Store   存 key,value

2、LoadOrStore   取&存-具体看代码

3、Load   取key对应的value

4、Range   遍历所有的key,value

5、Delete   删除key,及其value

package mainimport ("fmt""sync"
)func main() {var m sync.Map//Storem.Store(1,"a")m.Store(2,"b")//LoadOrStore//若key不存在,则存入key和value,返回false和输入的valuev,ok := m.LoadOrStore("1","aaa")fmt.Println(ok,v) //false aaa//若key已存在,则返回true和key对应的value,不会修改原来的valuev,ok = m.LoadOrStore(1,"aaa")fmt.Println(ok,v) //false aaa//Loadv,ok = m.Load(1)if ok{fmt.Println("it's an existing key,value is ",v)} else {fmt.Println("it's an unknown key")}//Range//遍历sync.Map, 要求输入一个func作为参数f := func(k, v interface{}) bool {//这个函数的入参、出参的类型都已经固定,不能修改//可以在函数体内编写自己的代码,调用map中的k,vfmt.Println(k,v)return true}m.Range(f)//Deletem.Delete(1)fmt.Println(m.Load(1))}
  相关解决方案