package mapsync import ( "sync" ) var ( // sync map MapString *mapString ) // lock type mapString struct { sync.RWMutex Data map[string]string } func NewMapString() *mapString { return &mapString{ Data: make(map[string]string), } } func (c *mapString) Set(key, val string) { c.Lock() defer c.Unlock() c.Data[key] = val } 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) Del(key string) { c.Lock() defer c.Unlock() delete(c.Data, key) } func (c *mapString) Keys() (keys []string) { c.RLock() defer c.RUnlock() for k, _ := range c.Data { keys = append(keys, k) } return } func (c *mapString) All() map[string]string { c.RLock() defer c.RUnlock() return c.Data }