美文网首页
golang分片map的实现

golang分片map的实现

作者: bug去无踪 | 来源:发表于2022-04-09 19:10 被阅读0次
package main

import (
    "errors"
    "fmt"
    "hash/crc32"
    "sync"
    "time"
)

type MapArr struct {
    sync.RWMutex
    data map[string]uint8
}
type MapList []*MapArr

func main() {
    a := NewArrayMap(10)
    go func() {
        a.Add("1")
    }()
    go func() {
        a.Add("2")
    }()
    go func() {
        a.Add("3")
    }()
    go func() {
        a.Add("4")
    }()
    go func() {
        a.Add("9")
    }()

    go func() {
        vv, _ := a.get("4")
        fmt.Println("获取结果:", vv)

    }()
    time.Sleep(time.Second * 5)
    fmt.Println(a)
    vv, _ := a.get("4")
    fmt.Println("获取结果:", vv)

}

func NewArrayMap(cap int) MapList {
    s := make([]*MapArr, cap)
    for i := 0; i < cap; i++ {
        temp := MapArr{data: make(map[string]uint8)}
        s[i] = &temp
    }
    return MapList(s)
}

func (list MapList) Add(key string) error {
    index := int((crc32.ChecksumIEEE([]byte(key)) % 10))
    list[index].Lock()
    defer list[index].Unlock()
    list[index].data[key] = 1

    return nil
}
func (list MapList) get(key string) (uint8, error) {
    index := int((crc32.ChecksumIEEE([]byte(key)) % 10))
    list[index].RLock()
    defer list[index].RUnlock()
    if list[index] != nil {
        if v, ok := list[index].data[key]; ok {
            return v, nil
        }
    }
    return 0, errors.New("key不存在")
}

相关文章

  • golang分片map的实现

  • Golang之Map源码

    引用 深入 Go 的 Map 使用和实现原理 哈希表 深度解密Go语言之map Golang map 的底层实现 使用

  • 剖析golang map的实现

    [TOC] 本文参考的是golang 1.10源码实现。 golang中map是一个kv对集合。底层使用hash ...

  • Golang:map

    map golang 中提供映射关系容器为map,其内部使用散列表(hash)实现 map 是一种无序的基于key...

  • golang map遍历为什么是无序的?

    golang map遍历为什么是无序的? 遍历map map底层使用哈希表实现,在运行过程中会进行扩容,扩容后顺序...

  • Go map底层实现

    golang map源码详解Golang map 如何进行删除操作?

  • golang Map 实现原理——Map

    map 的设计也被称为 “The dictionary problem”,它的任务是设计一种数据结构用来维护一个集...

  • leetcode two sums 比较傻x的实现方式

    装逼了 用的二叉搜索树 效率低到爆 下面是golang自带map实现(大部分golang方法)

  • 数据结构-HashMap

    HashMap 思考 python, golang 高级语言中map 如何实现的? HashMap 介绍 通过Ha...

  • map字典

    golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。 map 是字典的概...

网友评论

      本文标题:golang分片map的实现

      本文链接:https://www.haomeiwen.com/subject/yqapsrtx.html