github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/cmap/README.md (about)

     1  # concurrent map [![Build Status](https://travis-ci.com/orcaman/concurrent-map.svg?branch=master)](https://travis-ci.com/orcaman/concurrent-map)
     2  
     3  As explained [here](http://golang.org/doc/faq#atomic_maps) and [here](http://blog.golang.org/go-maps-in-action), 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.
     4  
     5  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](https://github.com/golang/go/issues/21035) and [here](https://stackoverflow.com/questions/11063473/map-with-concurrent-access)
     6  
     7  ## usage
     8  
     9  Import the package:
    10  
    11  ```go
    12  import (
    13  	"github.com/orcaman/concurrent-map"
    14  )
    15  
    16  ```
    17  
    18  ```bash
    19  go get "github.com/orcaman/concurrent-map"
    20  ```
    21  
    22  The package is now imported under the "cmap" namespace.
    23  
    24  ## example
    25  
    26  ```go
    27  	// Create a new map.
    28  	m := cmap.New()
    29  	// Sets item within map, sets "bar" under key "foo"
    30  	m.Set("foo", "bar")
    31  
    32  	// Retrieve item from map.
    33  	if val, ok := m.Get("foo"); ok {
    34  		bar := val.(string)
    35  	}
    36  	// Removes item under key "foo"
    37  	m.Remove("foo")
    38  ```
    39  
    40  For more examples have a look at concurrent_map_test.go.
    41  
    42  Running tests:
    43  
    44  ```bash
    45  go test "github.com/orcaman/concurrent-map"
    46  ```
    47  
    48  ## guidelines for contributing
    49  
    50  Contributions are highly welcome. In order for a contribution to be merged, please follow these guidelines:
    51  - Open an issue and describe what you are after (fixing a bug, adding an enhancement, etc.).
    52  - According to the core team's feedback on the above mentioned issue, submit a pull request, describing the changes and linking to the issue.
    53  - New code must have test coverage.
    54  - If the code is about performance issues, you must include benchmarks in the process (either in the issue or in the PR).
    55  - 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.
    56  
    57  ## language
    58  - [中文说明](./README-zh.md)
    59  
    60  ## license
    61  MIT (see [LICENSE](https://github.com/orcaman/concurrent-map/blob/master/LICENSE) file)