Compare commits

..

5 Commits

Author SHA1 Message Date
28a6c68e38 interface => any 2024-11-01 16:25:29 +08:00
ce2d84d282 update serialize 2024-10-24 21:43:52 +08:00
e2a2e6a3c2 增加合并数据方法 2024-03-11 11:08:08 +08:00
9120cd2c68 fix npe 2024-03-08 16:35:03 +08:00
ee1ff53593 fix 2024-03-08 16:32:53 +08:00
7 changed files with 111 additions and 64 deletions

View File

@ -13,34 +13,38 @@ package easymap
// //
// Date : 9:56 下午 2021/2/23 // Date : 9:56 下午 2021/2/23
type EasyMap interface { type EasyMap interface {
Get(key interface{}) (interface{}, bool) Get(key any) (any, bool)
GetWithReceiver(key interface{}, dest interface{}) error GetWithReceiver(key any, dest any) error
GetUint(key interface{}) (uint, error) GetUint(key any) (uint, error)
GetUint8(key interface{}) (uint8, error) GetUint8(key any) (uint8, error)
GetUint16(key interface{}) (uint16, error) GetUint16(key any) (uint16, error)
GetUint32(key interface{}) (uint32, error) GetUint32(key any) (uint32, error)
GetUint64(key interface{}) (uint64, error) GetUint64(key any) (uint64, error)
GetInt(key interface{}) (int, error) GetInt(key any) (int, error)
GetInt8(key interface{}) (int8, error) GetInt8(key any) (int8, error)
GetInt16(key interface{}) (int16, error) GetInt16(key any) (int16, error)
GetInt32(key interface{}) (int32, error) GetInt32(key any) (int32, error)
GetInt64(key interface{}) (int64, error) GetInt64(key any) (int64, error)
GetFloat32(key interface{}) (float32, error) GetFloat32(key any) (float32, error)
GetFloat64(key interface{}) (float64, error) GetFloat64(key any) (float64, error)
GetBool(key interface{}) (bool, error) GetBool(key any) (bool, error)
GetString(key interface{}) (string, error) GetString(key any) (string, error)
Set(key interface{}, value interface{}) Set(key any, value any)
Del(key interface{}) Del(key any)
Exist(key interface{}) bool Exist(key any) bool
Count() int Count() int
GetAll() map[interface{}]interface{} GetAll() map[any]any
GetAllForMapKeyString() map[string]interface{} GetAllForMapKeyString() map[string]any
// Merge 合并数据
Merge(mergeData ...EasyMap)
// MergeWithReceiver 合并数据并转换
MergeWithReceiver(receiver any, mergeData ...EasyMap) error
// Iterator 对数据的迭代 // Iterator 对数据的迭代
Iterator(IteratorFunc) Iterator(IteratorFunc)
// ToStruct 转换成结构体 // ToStruct 转换成结构体
ToStruct(receiver interface{}) error ToStruct(receiver any) error
// ToString 转为字符串 // ToString 转为字符串
ToString() string ToString() string
// Filter 过滤数据 // Filter 过滤数据
Filter(ignoreFieldList []string, rewriteFieldTable map[string]interface{}) map[string]interface{} Filter(ignoreFieldList []string, rewriteFieldTable map[string]string) map[string]any
} }

View File

@ -22,11 +22,11 @@ import (
// //
// Date : 15:52 2023/12/14 // Date : 15:52 2023/12/14
type common struct { type common struct {
normalDataTable []map[interface{}]interface{} // 普通数组 normalDataTable []map[any]any // 普通数组
syncMapDataTable []sync.Map // sync_map类型 syncMapDataTable []sync.Map // sync_map类型
dataTableType string // 数据表类型 dataTableType string // 数据表类型
segment int // 分片熟练 segment int // 分片熟练
lock *sync.RWMutex // 数据锁 lock *sync.RWMutex // 数据锁
} }
// initLock ... // initLock ...
@ -88,7 +88,7 @@ func (c *common) RUnlock() {
c.lock.RUnlock() c.lock.RUnlock()
} }
func (c *common) Get(key interface{}) (interface{}, bool) { func (c *common) Get(key any) (any, bool) {
segmentIndex := util.Hash.GetHashIDMod(key, c.segment) segmentIndex := util.Hash.GetHashIDMod(key, c.segment)
c.RLock() c.RLock()
defer c.RUnlock() defer c.RUnlock()
@ -101,7 +101,7 @@ func (c *common) Get(key interface{}) (interface{}, bool) {
} }
} }
func (c *common) GetWithReceiver(key interface{}, dest interface{}) error { func (c *common) GetWithReceiver(key any, dest any) error {
if nil == dest { if nil == dest {
return errors.New("dest is nil") return errors.New("dest is nil")
} }
@ -115,7 +115,7 @@ func (c *common) GetWithReceiver(key interface{}, dest interface{}) error {
return util.ConvertAssign(dest, val) return util.ConvertAssign(dest, val)
} }
func (c *common) GetUint(key interface{}) (uint, error) { func (c *common) GetUint(key any) (uint, error) {
var ( var (
val uint val uint
err error err error
@ -124,7 +124,7 @@ func (c *common) GetUint(key interface{}) (uint, error) {
return val, err return val, err
} }
func (c *common) GetUint8(key interface{}) (uint8, error) { func (c *common) GetUint8(key any) (uint8, error) {
var ( var (
val uint8 val uint8
err error err error
@ -133,7 +133,7 @@ func (c *common) GetUint8(key interface{}) (uint8, error) {
return val, err return val, err
} }
func (c *common) GetUint16(key interface{}) (uint16, error) { func (c *common) GetUint16(key any) (uint16, error) {
var ( var (
val uint16 val uint16
err error err error
@ -142,7 +142,7 @@ func (c *common) GetUint16(key interface{}) (uint16, error) {
return val, err return val, err
} }
func (c *common) GetUint32(key interface{}) (uint32, error) { func (c *common) GetUint32(key any) (uint32, error) {
var ( var (
val uint32 val uint32
err error err error
@ -151,7 +151,7 @@ func (c *common) GetUint32(key interface{}) (uint32, error) {
return val, err return val, err
} }
func (c *common) GetUint64(key interface{}) (uint64, error) { func (c *common) GetUint64(key any) (uint64, error) {
var ( var (
val uint64 val uint64
err error err error
@ -160,7 +160,7 @@ func (c *common) GetUint64(key interface{}) (uint64, error) {
return val, err return val, err
} }
func (c *common) GetInt(key interface{}) (int, error) { func (c *common) GetInt(key any) (int, error) {
var ( var (
val int val int
err error err error
@ -169,7 +169,7 @@ func (c *common) GetInt(key interface{}) (int, error) {
return val, err return val, err
} }
func (c *common) GetInt8(key interface{}) (int8, error) { func (c *common) GetInt8(key any) (int8, error) {
var ( var (
val int8 val int8
err error err error
@ -178,7 +178,7 @@ func (c *common) GetInt8(key interface{}) (int8, error) {
return val, err return val, err
} }
func (c *common) GetInt16(key interface{}) (int16, error) { func (c *common) GetInt16(key any) (int16, error) {
var ( var (
val int16 val int16
err error err error
@ -187,7 +187,7 @@ func (c *common) GetInt16(key interface{}) (int16, error) {
return val, err return val, err
} }
func (c *common) GetInt32(key interface{}) (int32, error) { func (c *common) GetInt32(key any) (int32, error) {
var ( var (
val int32 val int32
err error err error
@ -196,7 +196,7 @@ func (c *common) GetInt32(key interface{}) (int32, error) {
return val, err return val, err
} }
func (c *common) GetInt64(key interface{}) (int64, error) { func (c *common) GetInt64(key any) (int64, error) {
var ( var (
val int64 val int64
err error err error
@ -205,7 +205,7 @@ func (c *common) GetInt64(key interface{}) (int64, error) {
return val, err return val, err
} }
func (c *common) GetFloat32(key interface{}) (float32, error) { func (c *common) GetFloat32(key any) (float32, error) {
var ( var (
val float32 val float32
err error err error
@ -214,7 +214,7 @@ func (c *common) GetFloat32(key interface{}) (float32, error) {
return val, err return val, err
} }
func (c *common) GetFloat64(key interface{}) (float64, error) { func (c *common) GetFloat64(key any) (float64, error) {
var ( var (
val float64 val float64
err error err error
@ -223,7 +223,7 @@ func (c *common) GetFloat64(key interface{}) (float64, error) {
return val, err return val, err
} }
func (c *common) GetBool(key interface{}) (bool, error) { func (c *common) GetBool(key any) (bool, error) {
var ( var (
val bool val bool
err error err error
@ -232,7 +232,7 @@ func (c *common) GetBool(key interface{}) (bool, error) {
return val, err return val, err
} }
func (c *common) GetString(key interface{}) (string, error) { func (c *common) GetString(key any) (string, error) {
var ( var (
val string val string
err error err error
@ -241,7 +241,7 @@ func (c *common) GetString(key interface{}) (string, error) {
return val, err return val, err
} }
func (c *common) Set(key interface{}, value interface{}) { func (c *common) Set(key any, value any) {
segmentIndex := util.Hash.GetHashIDMod(key, c.segment) segmentIndex := util.Hash.GetHashIDMod(key, c.segment)
c.Lock() c.Lock()
defer c.Unlock() defer c.Unlock()
@ -253,7 +253,7 @@ func (c *common) Set(key interface{}, value interface{}) {
} }
} }
func (c *common) Del(key interface{}) { func (c *common) Del(key any) {
segmentIndex := util.Hash.GetHashIDMod(key, c.segment) segmentIndex := util.Hash.GetHashIDMod(key, c.segment)
c.Lock() c.Lock()
defer c.Unlock() defer c.Unlock()
@ -264,7 +264,7 @@ func (c *common) Del(key interface{}) {
} }
} }
func (c *common) Exist(key interface{}) bool { func (c *common) Exist(key any) bool {
_, exist := c.Get(key) _, exist := c.Get(key)
return exist return exist
} }
@ -284,8 +284,8 @@ func (c *common) Count() int {
return cnt return cnt
} }
func (c *common) GetAll() map[interface{}]interface{} { func (c *common) GetAll() map[any]any {
result := make(map[interface{}]interface{}) result := make(map[any]any)
c.RLock() c.RLock()
defer c.RUnlock() defer c.RUnlock()
for i := 0; i < c.segment; i++ { for i := 0; i < c.segment; i++ {
@ -294,7 +294,7 @@ func (c *common) GetAll() map[interface{}]interface{} {
result[k] = v result[k] = v
} }
} else { } else {
c.syncMapDataTable[i].Range(func(key, value interface{}) bool { c.syncMapDataTable[i].Range(func(key, value any) bool {
result[key] = value result[key] = value
return true return true
}) })
@ -308,9 +308,9 @@ func (c *common) GetAll() map[interface{}]interface{} {
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 9:48 下午 2021/9/15 // Date : 9:48 下午 2021/9/15
func (c *common) GetAllForMapKeyString() map[string]interface{} { func (c *common) GetAllForMapKeyString() map[string]any {
fullData := c.GetAll() fullData := c.GetAll()
finalData := make(map[string]interface{}) finalData := make(map[string]any)
for k, v := range fullData { for k, v := range fullData {
finalData[fmt.Sprintf("%v", k)] = v finalData[fmt.Sprintf("%v", k)] = v
} }
@ -353,7 +353,7 @@ func (c *common) Iterator(handleFunc IteratorFunc) {
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 15:42 2023/8/10 // Date : 15:42 2023/8/10
func (c *common) ToStruct(receiver interface{}) error { func (c *common) ToStruct(receiver any) error {
if nil == receiver { if nil == receiver {
return errors.New("receiver is nil") return errors.New("receiver is nil")
} }
@ -372,7 +372,7 @@ func (c *common) ToStruct(receiver interface{}) error {
// Date : 20:44 2023/8/15 // Date : 20:44 2023/8/15
func (c *common) ToString() string { func (c *common) ToString() string {
mapData := c.GetAllForMapKeyString() mapData := c.GetAllForMapKeyString()
return serialize.JSON.MarshalForString(mapData) return serialize.JSON.MarshalForStringIgnoreError(mapData)
} }
// Filter 对数据进行过滤 // Filter 对数据进行过滤
@ -380,8 +380,14 @@ func (c *common) ToString() string {
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 16:25 2024/3/8 // Date : 16:25 2024/3/8
func (c *common) Filter(ignoreFieldList []string, rewriteFieldTable map[string]string) map[string]interface{} { func (c *common) Filter(ignoreFieldList []string, rewriteFieldTable map[string]string) map[string]any {
result := make(map[string]interface{}) if nil == ignoreFieldList {
ignoreFieldList = make([]string, 0)
}
if nil == rewriteFieldTable {
rewriteFieldTable = make(map[string]string)
}
result := make(map[string]any)
ignoreFieldTable := make(map[string]bool) ignoreFieldTable := make(map[string]bool)
for _, item := range ignoreFieldList { for _, item := range ignoreFieldList {
ignoreFieldTable[item] = true ignoreFieldTable[item] = true
@ -399,3 +405,30 @@ func (c *common) Filter(ignoreFieldList []string, rewriteFieldTable map[string]s
} }
return result return result
} }
// Merge 合并数据
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:01 2024/3/11
func (c *common) Merge(mergeData ...EasyMap) {
for _, itemData := range mergeData {
allData := itemData.GetAll()
for k, v := range allData {
c.Set(k, v)
}
}
}
// MergeWithReceiver 合并并转换
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:06 2024/3/11
func (c *common) MergeWithReceiver(receiver any, mergeData ...EasyMap) error {
c.Merge(mergeData...)
if nil == receiver {
return nil
}
return c.ToStruct(receiver)
}

View File

@ -8,7 +8,7 @@
package easymap package easymap
// IteratorFunc 迭代函数, 返回值为是否继续迭代true 继续迭代 false 终止后续迭代 // IteratorFunc 迭代函数, 返回值为是否继续迭代true 继续迭代 false 终止后续迭代
type IteratorFunc func(key interface{}, value interface{}) bool type IteratorFunc func(key any, value any) bool
const ( const (
normalDataTableType = "NORMAL" normalDataTableType = "NORMAL"

View File

@ -17,7 +17,7 @@ import (
// Author : go_developer@163.com<白茶清欢> // Author : go_developer@163.com<白茶清欢>
// //
// Date : 10:17 下午 2021/2/23 // Date : 10:17 下午 2021/2/23
func keyNotFound(key interface{}) error { func keyNotFound(key any) error {
return fmt.Errorf("%v 未找到", key) return fmt.Errorf("%v 未找到", key)
} }

10
go.mod
View File

@ -4,12 +4,14 @@ go 1.21
toolchain go1.21.5 toolchain go1.21.5
require git.zhangdeman.cn/zhangdeman/util v0.0.0-20231014142840-445c6407db92 require (
git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241023104258-2e0a298aa558
git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e
)
require ( require (
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b // indirect git.zhangdeman.cn/zhangdeman/consts v0.0.0-20241023090605-10cff9173059 // indirect
git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231224125439-01f39b6ea08d // indirect github.com/BurntSushi/toml v1.4.0 // indirect
github.com/BurntSushi/toml v1.3.2 // indirect
github.com/Jeffail/gabs v1.4.0 // indirect github.com/Jeffail/gabs v1.4.0 // indirect
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect
github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 // indirect github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 // indirect

8
go.sum
View File

@ -1,15 +1,23 @@
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b h1:C7KftnLh7dOqzNRs5dn/9yqMDvuqMn5RCglvV6bY758= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b h1:C7KftnLh7dOqzNRs5dn/9yqMDvuqMn5RCglvV6bY758=
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k= git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20241023090605-10cff9173059 h1:TPAYdTKKUjgxtCnK38d1Tb4teyQp1C7wYHPdR32yZtM=
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20241023090605-10cff9173059/go.mod h1:IXXaZkb7vGzGnGM5RRWrASAuwrVSNxuoe0DmeXx5g6k=
git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231224125439-01f39b6ea08d h1:TV0BCQQewBEtLsv3i9gXkxLFd5A5bWBTiNd3D/I5o4Q= git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231224125439-01f39b6ea08d h1:TV0BCQQewBEtLsv3i9gXkxLFd5A5bWBTiNd3D/I5o4Q=
git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231224125439-01f39b6ea08d/go.mod h1:w7kG4zyTJ1uPFaTWhze+OQuaUBINT2XnDxpyiM6ctc0= git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231224125439-01f39b6ea08d/go.mod h1:w7kG4zyTJ1uPFaTWhze+OQuaUBINT2XnDxpyiM6ctc0=
git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241023104258-2e0a298aa558 h1:ZVJyyDKfYeA3TsN8UOi4IprkouK4wIIfCKe+F9byLWA=
git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20241023104258-2e0a298aa558/go.mod h1:/9eicss/Dt9tp2jwZ/4cXDqDKo/Dez+HuT5/NGdqW+s=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20230810063945-842592611562 h1:wo0r4mexqkPzQ1SZOw5z8A7FJ3ne1G6A/qWR3iaqlhw= git.zhangdeman.cn/zhangdeman/util v0.0.0-20230810063945-842592611562 h1:wo0r4mexqkPzQ1SZOw5z8A7FJ3ne1G6A/qWR3iaqlhw=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20230810063945-842592611562/go.mod h1:trYFOShINaQBvinQrH4A0G2kfL22Y2lygEcAiGDt/sc= git.zhangdeman.cn/zhangdeman/util v0.0.0-20230810063945-842592611562/go.mod h1:trYFOShINaQBvinQrH4A0G2kfL22Y2lygEcAiGDt/sc=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b h1:vnmxYrNdX6f5sEVjjkM1fIR+i32kHJ4g9DJqug9KKek= git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b h1:vnmxYrNdX6f5sEVjjkM1fIR+i32kHJ4g9DJqug9KKek=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b/go.mod h1:Yum5+tgP+Wf1GWUAyQz1Qh8Ab9m5+90GYkYdzqVs0lA= git.zhangdeman.cn/zhangdeman/util v0.0.0-20230811070456-d6a489d5860b/go.mod h1:Yum5+tgP+Wf1GWUAyQz1Qh8Ab9m5+90GYkYdzqVs0lA=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20231014142840-445c6407db92 h1:p1GVRYJc3NNoZeLs4CukitAbM3O/ALNq3l31cnbBQDM= git.zhangdeman.cn/zhangdeman/util v0.0.0-20231014142840-445c6407db92 h1:p1GVRYJc3NNoZeLs4CukitAbM3O/ALNq3l31cnbBQDM=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20231014142840-445c6407db92/go.mod h1:6OBeuwKy2J1TjdAwStEyC6aYC3kStmJiCg1eFC7g0fk= git.zhangdeman.cn/zhangdeman/util v0.0.0-20231014142840-445c6407db92/go.mod h1:6OBeuwKy2J1TjdAwStEyC6aYC3kStmJiCg1eFC7g0fk=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e h1:Q973S6CcWr1ICZhFI1STFOJ+KUImCl2BaIXm6YppBqI=
git.zhangdeman.cn/zhangdeman/util v0.0.0-20240618042405-6ee2c904644e/go.mod h1:VpPjBlwz8U+OxZuxzHQBv1aEEZ3pStH6bZvT21ADEbI=
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo=
github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=

View File

@ -25,9 +25,9 @@ func NewSegment(segmentCnt int) (EasyMap, error) {
lock: nil, lock: nil,
}, },
} }
em.normalDataTable = make([]map[interface{}]interface{}, segmentCnt) em.normalDataTable = make([]map[any]any, segmentCnt)
for i := 0; i < segmentCnt; i++ { for i := 0; i < segmentCnt; i++ {
em.normalDataTable[i] = make(map[interface{}]interface{}) em.normalDataTable[i] = make(map[any]any)
} }
em.common.initLock() em.common.initLock()
return em, nil return em, nil