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