Categorygithub.com/theanzy/concurrent-map
modulepackage
1.1.6
Repository: https://github.com/theanzy/concurrent-map.git
Documentation: pkg.go.dev

# README

concurrent map Build Status

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

usage

Import the package:

import (
	"github.com/orcaman/concurrent-map"
)

go get "github.com/orcaman/concurrent-map"

The package is now imported under the "cmap" namespace.

example


	// Create a new map.
	m := cmap.New()

	// Sets item within map, sets "bar" under key "foo"
	m.Set("foo", "bar")

	// Retrieve item from map.
	if tmp, ok := m.Get("foo"); ok {
		bar := tmp.(string)
	}

	// 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"

guidelines for contributing

Contributions are highly welcome. In order for a contribution to be merged, please follow these guidelines:

  • Open an issue and describe what you are after (fixing a bug, adding an enhancement, etc.).
  • According to the core team's feedback on the above mentioned issue, submit a pull request, describing the changes and linking to the issue.
  • New code must have test coverage.
  • If the code is about performance issues, you must include benchmarks in the process (either in the issue or in the PR).
  • In general, we would like to keep concurrent-map as simple as possible and as similar to the native map. Please keep this in mind when opening issues.

license

MIT (see LICENSE file)

# Functions

New creates a new concurrent map.
NewNestedCMap return NestedCMap.
NewNestedGSet CMap(<Gset>) key<set1>,key<set2>.
NewNestedQueue returns Cmap(key,<queue>).
NewUint64Map CMap(key string, value uint64).

# Variables

No description provided by the author

# Structs

ConcurrentMapShared is a "thread" safe string to anything map.
NestedCMap Cmap with NestedGSet as values CMap<NestedGSet>.
NestedGSet CMap(<Gset>) ..
NestedQueue Cmap(key,<queue>).
Tuple is used by the Iter & IterBuffered functions to wrap two variables together over a channel,.
Uint64Map uses atomic uint64 as value for key CMap(key string, value uint64).

# Type aliases

ConcurrentMap is a "thread" safe map of type string:Anything.
IterCb Iterator callback,called for every key,value found in maps.
RemoveCb is a callback executed in a map.RemoveCb() call, while Lock is held If returns true, the element will be removed from the map.
UpsertCb Callback to return new element to be inserted into the map It is called while lock is held, therefore it MUST NOT try to access other keys in same map, as it can lead to deadlock since Go sync.RWLock is not reentrant.