1//+build !go1.9 2 3package concurrent 4 5import "sync" 6 7// Map implements a thread safe map for go version below 1.9 using mutex 8type Map struct { 9 lock sync.RWMutex 10 data map[interface{}]interface{} 11} 12 13// NewMap creates a thread safe map 14func NewMap() *Map { 15 return &Map{ 16 data: make(map[interface{}]interface{}, 32), 17 } 18} 19 20// Load is same as sync.Map Load 21func (m *Map) Load(key interface{}) (elem interface{}, found bool) { 22 m.lock.RLock() 23 elem, found = m.data[key] 24 m.lock.RUnlock() 25 return 26} 27 28// Load is same as sync.Map Store 29func (m *Map) Store(key interface{}, elem interface{}) { 30 m.lock.Lock() 31 m.data[key] = elem 32 m.lock.Unlock() 33} 34