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不存在")
}
网友评论