Lately I’ve been using Go’s concurrent map. And sometimes I needed to count the items I’ve stored in the map. I have ranged over the items and incremented a counter, and it was done:
package main import ( "sync" "log" ) func main() { m := sync.Map{} m.Store("k1", "v1") m.Store("k2", "v2") count := 0 m.Range(func(key, value interface{}) bool{ count++ return true }) log.Println(count) }
But I didn’t want to range over the items each time I wanted to count them. So I thought of incrementing the counter every time an element was added, and to decrementing it when one was removed. The following is just for practice, I didn’t perform any advanced tests. Continue reading Counting number of items in a concurrent map