github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/test/chapter/ch9/02_maps/rw_map.go (about) 1 package maps 2 3 import "sync" 4 5 type RWLockMap struct { 6 m map[interface{}]interface{} 7 lock sync.RWMutex 8 } 9 10 func (m *RWLockMap) Get(key interface{}) (interface{}, bool) { 11 m.lock.RLock() 12 v, ok := m.m[key] 13 m.lock.RUnlock() 14 return v, ok 15 } 16 17 func (m *RWLockMap) Set(key interface{}, value interface{}) { 18 m.lock.Lock() 19 m.m[key] = value 20 m.lock.Unlock() 21 } 22 23 func (m *RWLockMap) Del(key interface{}) { 24 m.lock.Lock() 25 delete(m.m, key) 26 m.lock.Unlock() 27 } 28 29 func CreateRWLockMap() *RWLockMap { 30 m := make(map[interface{}]interface{}, 0) 31 return &RWLockMap{m: m} 32 }