package data import ( "sync" ) var ( // Cache CacheMapFloat *MapFloat ) // lock type MapFloat struct { sync.RWMutex Data map[string]float64 } func NewMapFloat() *MapFloat { return &MapFloat{ Data: make(map[string]float64), } } func (c *MapFloat) All() map[string]float64 { c.RLock() defer c.RUnlock() return c.Data } func (c *MapFloat) Get(key string) float64 { c.RLock() defer c.RUnlock() vals, ok := c.Data[key] if !ok { return 0 } return vals } func (c *MapFloat) Set(key string, val float64) { c.Lock() defer c.Unlock() c.Data[key] = val } func (c *MapFloat) Keys() (keys []string) { c.RLock() defer c.RUnlock() for k, _ := range c.Data { keys = append(keys, k) } return }