golang 中map并发读写

来源:互联网 发布:js cookie不起作用 编辑:程序博客网 时间:2024/06/17 10:47

项目上之前出现map并发问题,查找资料后自己整理一下。

代码如下:

//map 并发存取type BeeMap struct {    lock *sync.RWMutex    bm   map[string]interface{}}func NewBeeMap() *BeeMap {    return &BeeMap{        lock: new(sync.RWMutex),        bm:   make(map[string]interface{}),    }}//Get from maps return the k's valuefunc (m *BeeMap) Get(k string) interface{} {    m.lock.RLock()    defer m.lock.RUnlock()    if val, ok := m.bm[k]; ok {        return val    }    return nil}// Maps the given key and value. Returns false// if the key is already in the map and changes nothing.func (m *BeeMap) Set(k string, v interface{}) bool {    m.lock.Lock()    defer m.lock.Unlock()    if val, ok := m.bm[k]; !ok {        m.bm[k] = v    } else if val != v {        m.bm[k] = v    } else {        return false    }    return true}// Returns true if k is exist in the map.func (m *BeeMap) Check(k string) bool {    m.lock.RLock()    defer m.lock.RUnlock()    if _, ok := m.bm[k]; !ok {        return false    }    return true}func (m *BeeMap) Delete(k string) {    m.lock.Lock()    defer m.lock.Unlock()    delete(m.bm, k)}
0 0
原创粉丝点击