一起聊聊sync.Map 的基本用法

Sync.Map是利用了原子操作来减少锁的使用,下面这篇文章和大家一起聊聊sync.Map 的基本用法以及具体的使用使用场景,下面一起来看一下,希望能够帮助到各位。


一起聊聊sync.Map 的基本用法


一起聊聊sync.Map 的基本用法


Sync.Map 的使用还是挺简单的,map 中有的操作,在 sync.Map 都有,区别是在 sync.Map 中,所有的操作都需要通过调用其方法来进行。sync.Map 里面几个常用的方法:


●  Store:我们新增或者修改数据的时候,都可以使用 Store 方法。

●  Load:读取数据的方法。

●  Range:遍历数据的方法。

●  Delete:删除数据的方法。


var m sync.Map
 
// 写入/修改
m.Store("foo", 1)
 
// 读取
fmt.Println(m.Load("foo")) // 1 true
 
// 遍历
m.Range(func(key, value interface{}) bool {
    fmt.Println(key, value) // foo 1
    return true
})
 
// 删除
m.Delete("foo")
fmt.Println(m.Load("foo")) // nil false


注意:在 sync.Map 中,key 和 value 都是 interface{} 类型的,也就是说,我们可以使用任意类型的 key 和 value。 而不像 map,只能存在一种类型的 key 和 value。从这个角度来看,它的类型类似于 map[any]any。


另外一个需要注意的是,Range 方法的参数是一个函数,这个函数如果返回 false,那么遍历就会停止。


sync.Map 的使用场景


在 sync.Map 源码中,已经告诉了我们 sync.Map 的使用场景:


The Map type is optimized for two common use cases: (1) when the entry for a given
key is only ever written once but read many times, as in caches that only grow,
or (2) when multiple goroutines read, write, and overwrite entries for disjoint
sets of keys. In these two cases, use of a Map may significantly reduce lock
contention compared to a Go map paired with a separate Mutex or RWMutex.


翻译过来就是,Map 类型针对两种常见用例进行了优化:


●  当给定 key 的条目只写入一次但读取多次时,如在只会增长的缓存中。(读多写少)


●  当多个 goroutine 读取、写入和覆盖不相交的键集的条目。(不同 goroutine 操作不同的 key)。


关于sync.Map 的基本用法解析就到这里,翼速应用平台内有更多相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题