最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go使用sync.Map來解決map的并發(fā)操作問題

 更新時間:2021年10月31日 10:27:52   作者:新亮筆記  
在 Golang 中 map 不是并發(fā)安全的,sync.Map 的引入確實解決了 map 的并發(fā)安全問題,本文就詳細的介紹一下如何使用,感興趣的可以了解一下

前言

在 Golang 中 map 不是并發(fā)安全的,自 1.9 才引入了 sync.Map ,sync.Map 的引入確實解決了 map 的并發(fā)安全問題,不過 sync.Map 卻沒有實現(xiàn) len() 函數(shù),如果想要計算 sync.Map 的長度,稍微有點麻煩,需要使用 Range 函數(shù)。

map 并發(fā)操作出現(xiàn)問題

func main() {
 demo := make(map[int]int)

 go func() {
  for j := 0; j < 1000; j++ {
   demo[j] = j
  }
 }()

 go func() {
  for j := 0; j < 1000; j++ {
   fmt.Println(demo[j])
  }
 }()

 time.Sleep(time.Second * 1)
}

執(zhí)行輸出:

fatal error: concurrent map read and map write

sync.Map 解決并發(fā)操作問題

func main() {
 demo := sync.Map{}

 go func() {
  for j := 0; j < 1000; j++ {
   demo.Store(j, j)
  }
 }()

 go func() {
  for j := 0; j < 1000; j++ {
   fmt.Println(demo.Load(j))
  }
 }()

 time.Sleep(time.Second * 1)
}

執(zhí)行輸出:
<nil> false
1 true

...

999 true

計算 map 長度

func main() {
 demo := make(map[int]int)

 for j := 0; j < 1000; j++ {
  demo[j] = j
 }

 fmt.Println("len of demo:", len(demo))
}

執(zhí)行輸出:
len of demo: 1000

計算 sync.Map 長度

func main() {
 demo := sync.Map{}
 
 for j := 0; j < 1000; j++ {
  demo.Store(j, j)
 }

 lens := 0
 demo.Range(func(key, value interface{}) bool {
  lens++
  return true
 })

 fmt.Println("len of demo:", lens)
}

執(zhí)行輸出:
len of demo: 1000

小結

  • Load 加載 key 數(shù)據(jù)
  • Store 更新或新增 key 數(shù)據(jù)
  • Delete 刪除 key 數(shù)據(jù)
  • Range 遍歷數(shù)據(jù)
  • LoadOrStore 如果存在 key 數(shù)據(jù)則返回,反之則設置
  • LoadAndDelete 如果存在 key 數(shù)據(jù)則刪除

到此這篇關于Go使用sync.Map來解決map的并發(fā)操作問題的文章就介紹到這了,更多相關Go sync.Map解決map并發(fā)操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Go語言實現(xiàn)壓縮文件處理

    基于Go語言實現(xiàn)壓縮文件處理

    在現(xiàn)代的應用開發(fā)中,處理壓縮文件(如 .zip 格式)是常見的需求,本文將介紹如何使用 Go 語言封裝一個 ziputil 包,來處理文件的壓縮和解壓操作,需要的可以了解下
    2024-11-11
  • Go語言實現(xiàn)順序存儲的線性表實例

    Go語言實現(xiàn)順序存儲的線性表實例

    這篇文章主要介紹了Go語言實現(xiàn)順序存儲的線性表的方法,實例分析了Go語言實現(xiàn)線性表的定義、插入、刪除元素等的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • go?micro微服務框架項目搭建方法

    go?micro微服務框架項目搭建方法

    這篇文章主要為大家介紹了go?micro微服務框架項目搭建方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • go select編譯期的優(yōu)化處理邏輯使用場景分析

    go select編譯期的優(yōu)化處理邏輯使用場景分析

    select 是 Go 中的一個控制結構,類似于用于通信的 switch 語句。每個 case 必須是一個通信操作,要么是發(fā)送要么是接收。接下來通過本文給大家介紹go select編譯期的優(yōu)化處理邏輯使用場景分析,感興趣的朋友一起看看吧
    2021-06-06
  • Go設計模式之觀察者模式講解和代碼示例

    Go設計模式之觀察者模式講解和代碼示例

    觀察者是一種行為設計模式, 允許一個對象將其狀態(tài)的改變通知其他對象,觀察者模式提供了一種作用于任何實現(xiàn)了訂閱者接口的對象的機制, 可對其事件進行訂閱和取消訂閱,本文就通過代碼示例給大家詳細介紹一下Go的觀察者模式,需要的朋友可以參考下
    2023-07-07
  • Golang 正則匹配效率詳解

    Golang 正則匹配效率詳解

    這篇文章主要介紹了Golang 正則匹配效率詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • golang字符串拼接實現(xiàn)方式和區(qū)別對比

    golang字符串拼接實現(xiàn)方式和區(qū)別對比

    本文介紹了Go語言中字符串拼接的多種方法及其優(yōu)缺點,推薦使用strings.Builder進行頻繁拼接以優(yōu)化內存分配和性能,同時,還討論了通過sync.Pool優(yōu)化高頻創(chuàng)建的對象,以減少垃圾回收壓力,感興趣的朋友一起看看吧
    2025-02-02
  • Golang如何快速刪除map所有元素

    Golang如何快速刪除map所有元素

    這篇文章主要介紹了Golang如何快速刪除map所有元素問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • golang實現(xiàn)ping命令的完整代碼

    golang實現(xiàn)ping命令的完整代碼

    這篇文章給大家介紹了如何使用golang實現(xiàn)ping命令,文中給大家介紹了完整的實現(xiàn)代碼,并有詳細的圖文講解,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Golang實現(xiàn)超時退出的三種方式

    Golang實現(xiàn)超時退出的三種方式

    這篇文章主要介紹了Golang三種方式實現(xiàn)超時退出,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

锡林郭勒盟| 桂平市| 中阳县| 务川| 乐亭县| 雷波县| 淮阳县| 肥东县| 台中市| 上蔡县| 屏东县| 清丰县| 阳江市| 沙田区| 公安县| 六枝特区| 郎溪县| 石首市| 南江县| 永济市| 静安区| 宿松县| 乡城县| 彭州市| 青海省| 隆安县| 绍兴市| 原平市| 酒泉市| 江津市| 泗阳县| 寿阳县| 老河口市| 东平县| 阿城市| 浪卡子县| 广南县| 封开县| 香港 | 循化| 临泉县|