加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang 中map并发读写

发布时间:2020-12-16 18:23:08 所属栏目:大数据 来源:网络整理
导读:项目上之前出现map并发问题,查找资料后自己整理一下。 代码如下: //map 并发存取 type BeeMap struct { lock *sync.RWMutex bm map [ string ] interface {}} func NewBeeMap() *BeeMap { return BeeMap{ lock: new (sync.RWMutex),bm: make ( map [ strin

项目上之前出现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 value
func (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)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读