I have the following line of code:
var a_map = make(map[string] []int)
Part of my code, which is utilizing the a_map variable occasionally throws the following error:
fatal error: concurrent map read and map write
In an attempt to create a more robust solution, one that is free from such an error, I would like to use a sync.Map as opposed to a generic map. I was inspired to do so by the only answer provided to this stack overflow question. However, I am unclear as to the proper syntax for doing so.
For my first attempt I utilized the following line of code:
var a_map = make(sync.Map[string] []int)
Which resulted in the following error:
...syntax error: unexpected ], expecting expression
Then I tried:
sync_map := new(sync.Map)
var a_map = make(sync_map[string] []int)
Which resulted in the same error:
...syntax error: unexpected ], expecting expression
sync.Map
is not a Go map
, and so you cannot using the a_map["key"]
syntax with it. Rather, it is a struct
with methods providing the usual map operations. The syntax for using it is:
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
Depending on the source of your concurrency, you may require similar synchronisation of the []int values under each key, which sync.Map will not give you. sync.Map only provides load/store synchronisation per key. Drop a comment if so, and we can try to help you out further.