我有以下代码行:
var a_map = make(map[string] []int)
我的部分代码利用a_map变量有时会引发以下错误:
fatal error: concurrent map read and map write
为了尝试创建一种更强大的解决方案(没有这种错误),我想使用sync.Map而不是通用映射。提供给此堆栈溢出question的唯一答案启发了我。但是,我不清楚这样做的正确语法。
我第一次尝试使用以下代码行:
var a_map = make(sync.Map[string] []int)
导致以下错误:
...syntax error: unexpected ], expecting expression
然后我尝试了:
sync_map := new(sync.Map)
var a_map = make(sync_map[string] []int)
导致相同的错误:
...syntax error: unexpected ], expecting expression
最佳答案
sync.Map
不是Go map
,因此您不能将a_map["key"]
语法与其一起使用。而是一个struct
,其中包含提供常规 map 操作的方法。使用它的语法是:
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仅提供每个键的加载/存储同步。如果需要,请发表评论,我们会尽力帮助您。
关于go - 将标准Golang映射转换为Sync.Map以避免出现竞争情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59294816/