首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将标准Golang地图转换为Sync.Map以避免竞争条件

将标准Golang地图转换为Sync.Map以避免竞争条件
EN

Stack Overflow用户
提问于 2019-12-12 06:06:15
回答 1查看 7.5K关注 0票数 1

我有下面这行代码:

代码语言:javascript
复制
var a_map = make(map[string] []int)

我的部分代码利用了a_map变量,偶尔会抛出以下错误:

代码语言:javascript
复制
fatal error: concurrent map read and map write

为了创建一个更健壮的解决方案,一个没有这种错误的解决方案,我想使用一个sync.Map,而不是一个通用的map。这个堆栈溢出question的唯一答案激发了我这样做的灵感。然而,我不清楚这样做的正确语法。

在我的第一次尝试中,我使用了以下代码行:

代码语言:javascript
复制
var a_map = make(sync.Map[string] []int)

这导致了以下错误:

代码语言:javascript
复制
...syntax error: unexpected ], expecting expression

然后我试着:

代码语言:javascript
复制
 sync_map := new(sync.Map)
 var a_map = make(sync_map[string] []int)

这导致了相同的错误:

代码语言:javascript
复制
...syntax error: unexpected ], expecting expression
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-12 06:19:37

sync.Map不是Go map,因此不能对它使用a_map["key"]语法。相反,它是一个具有提供常规映射操作的方法的struct。使用它的语法是:

代码语言:javascript
复制
var m sync.Map
m.Store("example", []int{1, 2, 3})
fmt.Println(m.Load("example")) // [1 2 3] true

-- https://play.golang.org/p/7rbEG_x0mrC

根据并发源的不同,您可能需要对每个键下的[]int值进行类似的同步,这是sync.Map不会提供的。sync.Map仅为每个键提供加载/存储同步。如果是这样,请留下评论,我们可以尝试进一步帮助您。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59294816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档