a thread-safe concurrent map for go
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.
Running tests:
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-map as simple as possible and as similar to the native map. Please keep this in mind when opening issues.MIT (see LICENSE file)
No open issues yet, or sync has not completed.