func (m ConcurrentMap) GetShard(key int) *ConcurrentMapShared {
	return m.shards[uint(m.fnv32(key))%uint(m.shardCount)]
}
GetShard returns shard under given key
package util
import (
	"encoding/json"
	"sync"
)
type ConcurrentMap struct {
	shards     []*ConcurrentMapShared
	shardCount int
}
type ConcurrentMapShared struct {
	items map[int]int64
	sync.RWMutex  
}
func New(shardCount int) ConcurrentMap {
	m := new(ConcurrentMap)
	m.shardCount = shardCount
	m.shards = make([]*ConcurrentMapShared, shardCount)
	for i := 0; i < shardCount; i++ {
		m.shards[i] = &ConcurrentMapShared{items: make(map[int]int64)}
	}
	return *m
}