Golang sync.Map 简介与用法
发布日期:2021-06-29 19:23:48
浏览次数:2
分类:技术文章
本文共 1320 字,大约阅读时间需要 4 分钟。
Golang 中的 map 在并发情况下,只读是线程安全的,并发读写线程不安全。为了解决这个问题,Golang 提供了语言层级的并发读写安全的 sync.Map。
type Map struct { // contains filtered or unexported fields}//删除操作func (m *Map) Delete(key interface{})//读操作func (m *Map) Load(key interface{}) (value interface{}, ok bool)//读取或写入。存在指定的 key 则读取,否则写入。actual为存在的 value 或新写入的 value,loaded 读操作返回true,写操作返回falsefunc (m *Map) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)//写操作func (m *Map) Store(key, value interface{})//遍历func (m *Map) Range(f func(key, value interface{}) bool)
sync.Map 开箱即用,无需像 map 调用 make() 进行显示初始化。此外,sync.Map 的 key 和 value 类型为空接口 interface{},表示可存储任意类型的数据。示例代码如下:
package mainimport ( "fmt" "sync")var m sync.Mapfunc main() { // 写 m.Store("dablelv", "27") m.Store("cat", "28") // 读 v, ok := m.Load("dablelv") fmt.Printf("Load: v, ok = %v, %v\n", v, ok) // 删除 m.Delete("dablelv") // 读或写 // 如果 key 存在则读并返回 true,否则写并返回 false v, ok = m.LoadOrStore("dablelv", "18") fmt.Printf("LoadOrStore: v, ok = %v, %v\n", v, ok) // 遍历 // 操作函数 f := func(key, value interface{}) bool { fmt.Printf("Range: k, v = %v, %v\n", key, value) return true } m.Range(f)}
编译运行输出:
Load: v, ok = 27, trueLoadOrStore: v, ok = 18, falseRange: k, v = dablelv, 18Range: k, v = cat, 28
参考文献
[1]
[2]转载地址:https://dablelv.blog.csdn.net/article/details/95451945 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月10日 02时13分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
作用域链的理解
2019-04-30
JavaScript原型,原型链
2019-04-30
什么是事件代理
2019-04-30
Javascript如何实现继承
2019-04-30
谈谈This对象的理解
2019-04-30
事件模型
2019-04-30
new操作符具体干了什么呢?
2019-04-30
Ajax原理
2019-04-30
模块化开发
2019-04-30
异步加载JS的方式有哪些
2019-04-30
那些操作会造成内存泄漏
2019-04-30
XML和JSON的区别?
2019-04-30
浅谈webpack
2019-04-30
AMD 和 Commonjs
2019-04-30
常见web安全及防护原理
2019-04-30
设计模式看这里就够了
2019-04-30
为什么要有同源限制
2019-04-30
javascript 定义对象的方式
2019-04-30
常见兼容性问题
2019-04-30