As explained here and here, the
map type in Go doesn't support concurrent reads and writes.
concurrent-map provides a high-performance solution to this by sharding the map with minimal time spent waiting for locks.
Prior to Go 1.9, there was no concurrent map implementation in the stdlib. In Go 1.9,
sync.Map was introduced. The new
sync.Map has a few key differences from this map. The stdlib
sync.Map is designed for append-only scenarios. So if you want to use the map for something more like in-memory db, you might benefit from using our version. You can read more about it in the golang repo, for example here and here
Import the package:
import ( "github.com/orcaman/concurrent-map/v2" )
go get "github.com/orcaman/concurrent-map/v2"
The package is now imported under the "cmap" namespace.
// Create a new map. m := cmap.New[string]() // Sets item within map, sets "bar" under key "foo" m.Set("foo", "bar") // Retrieve item from map. bar, ok := m.Get("foo") // Removes item under key "foo" m.Remove("foo")
For more examples have a look at concurrent_map_test.go.
go test "github.com/orcaman/concurrent-map/v2"
Contributions are highly welcome. In order for a contribution to be merged, please follow these guidelines:
concurrent-mapas simple as possible and as similar to the native
map. Please keep this in mind when opening issues.
MIT (see LICENSE file)