登录
首页 >  Golang >  Go教程

Go使用sync.Map来解决map的并发操作问题

来源:脚本之家

时间:2023-01-08 21:27:22 392浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《Go使用sync.Map来解决map的并发操作问题》,聊聊map、sync.Map、并发操作,希望可以帮助到正在努力赚钱的你。

前言

在 Golang 中 map 不是并发安全的,自 1.9 才引入了 sync.Map ,sync.Map 的引入确实解决了 map 的并发安全问题,不过 sync.Map 却没有实现 len() 函数,如果想要计算 sync.Map 的长度,稍微有点麻烦,需要使用 Range 函数。

map 并发操作出现问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
func main() {
 demo := make(map[int]int)
 
 go func() {
  for j := 0; j
 
<p>执行输出:<br></p>
<blockquote>
<p>fatal error: concurrent map read and map write</p>
</blockquote>
<h2>sync.Map 解决并发操作问题<br></h2>
 
<pre class="brush:plain;">func main() {
 demo := sync.Map{}
 
 go func() {
  for j := 0; j
 
<blockquote>
<p>执行输出:<br><nil> false<br>
1 true</nil></p>
<p>...</p>
<p>999 true</p>
</blockquote>
<h2>计算 map 长度<br></h2>
 
<pre class="brush:plain;">func main() {
 demo := make(map[int]int)
 
 for j := 0; j
 
<blockquote>
<p>执行输出:<br>
len of demo: 1000</p>
</blockquote>
<h2>计算 sync.Map 长度<br></h2>
 
<pre class="brush:plain;">func main() {
 demo := sync.Map{}
  
 for j := 0; j
 
<blockquote>
<p>执行输出:<br>
len of demo: 1000</p>
</blockquote>
<p>小结</p>
</pre></pre></pre>
  • Load 加载 key 数据
  • Store 更新或新增 key 数据
  • Delete 删除 key 数据
  • Range 遍历数据
  • LoadOrStore 如果存在 key 数据则返回,反之则设置
  • LoadAndDelete 如果存在 key 数据则删除

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Go使用sync.Map来解决map的并发操作问题》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表