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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Golang sync.WaitGroup 简介与用法
下一篇:Golang bytes.Buffer 用法精述

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月10日 02时13分20秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章