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
type EasyMap interface {
Get(key interface{}) (interface{}, bool)
GetWithReceiver(key interface{}, dest interface{}) error
GetUint(key interface{}) (uint, error)
GetUint8(key interface{}) (uint8, error)
GetUint16(key interface{}) (uint16, error)
GetUint32(key interface{}) (uint32, error)
GetUint64(key interface{}) (uint64, error)
GetInt(key interface{}) (int, error)
GetInt8(key interface{}) (int8, error)
GetInt16(key interface{}) (int16, error)
GetInt32(key interface{}) (int32, error)
GetInt64(key interface{}) (int64, error)
GetFloat32(key interface{}) (float32, error)
GetFloat64(key interface{}) (float64, error)
GetBool(key interface{}) (bool, error)
GetString(key interface{}) (string, error)
Set(key interface{}, value interface{})
Del(key interface{})
Exist(key interface{}) bool
Get(key any) (any, bool)
GetWithReceiver(key any, dest any) error
GetUint(key any) (uint, error)
GetUint8(key any) (uint8, error)
GetUint16(key any) (uint16, error)
GetUint32(key any) (uint32, error)
GetUint64(key any) (uint64, error)
GetInt(key any) (int, error)
GetInt8(key any) (int8, error)
GetInt16(key any) (int16, error)
GetInt32(key any) (int32, error)
GetInt64(key any) (int64, error)
GetFloat32(key any) (float32, error)
GetFloat64(key any) (float64, error)
GetBool(key any) (bool, error)
GetString(key any) (string, error)
Set(key any, value any)
Del(key any)
Exist(key any) bool
Count() int
GetAll() map[interface{}]interface{}
GetAllForMapKeyString() map[string]interface{}
GetAll() map[any]any
GetAllForMapKeyString() map[string]any
// Merge 合并数据
Merge(mergeData ...EasyMap)
// MergeWithReceiver 合并数据并转换
MergeWithReceiver(receiver any, mergeData ...EasyMap) error
// Iterator 对数据的迭代
Iterator(IteratorFunc)
// ToStruct 转换成结构体
ToStruct(receiver interface{}) error
ToStruct(receiver any) error
// ToString 转为字符串
ToString() string
// Filter 过滤数据
Filter(ignoreFieldList []string, rewriteFieldTable map[string]interface{}) map[string]interface{}
Filter(ignoreFieldList []string, rewriteFieldTable map[string]string) map[string]any
}

View File

@ -22,7 +22,7 @@ import (
//
// Date : 15:52 2023/12/14
type common struct {
normalDataTable []map[interface{}]interface{} // 普通数组
normalDataTable []map[any]any // 普通数组
syncMapDataTable []sync.Map // sync_map类型
dataTableType string // 数据表类型
segment int // 分片熟练
@ -88,7 +88,7 @@ func (c *common) 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)
c.RLock()
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 {
return errors.New("dest is nil")
}
@ -115,7 +115,7 @@ func (c *common) GetWithReceiver(key interface{}, dest interface{}) error {
return util.ConvertAssign(dest, val)
}
func (c *common) GetUint(key interface{}) (uint, error) {
func (c *common) GetUint(key any) (uint, error) {
var (
val uint
err error
@ -124,7 +124,7 @@ func (c *common) GetUint(key interface{}) (uint, error) {
return val, err
}
func (c *common) GetUint8(key interface{}) (uint8, error) {
func (c *common) GetUint8(key any) (uint8, error) {
var (
val uint8
err error
@ -133,7 +133,7 @@ func (c *common) GetUint8(key interface{}) (uint8, error) {
return val, err
}
func (c *common) GetUint16(key interface{}) (uint16, error) {
func (c *common) GetUint16(key any) (uint16, error) {
var (
val uint16
err error
@ -142,7 +142,7 @@ func (c *common) GetUint16(key interface{}) (uint16, error) {
return val, err
}
func (c *common) GetUint32(key interface{}) (uint32, error) {
func (c *common) GetUint32(key any) (uint32, error) {
var (
val uint32
err error
@ -151,7 +151,7 @@ func (c *common) GetUint32(key interface{}) (uint32, error) {
return val, err
}
func (c *common) GetUint64(key interface{}) (uint64, error) {
func (c *common) GetUint64(key any) (uint64, error) {
var (
val uint64
err error
@ -160,7 +160,7 @@ func (c *common) GetUint64(key interface{}) (uint64, error) {
return val, err
}
func (c *common) GetInt(key interface{}) (int, error) {
func (c *common) GetInt(key any) (int, error) {
var (
val int
err error
@ -169,7 +169,7 @@ func (c *common) GetInt(key interface{}) (int, error) {
return val, err
}
func (c *common) GetInt8(key interface{}) (int8, error) {
func (c *common) GetInt8(key any) (int8, error) {
var (
val int8
err error
@ -178,7 +178,7 @@ func (c *common) GetInt8(key interface{}) (int8, error) {
return val, err
}
func (c *common) GetInt16(key interface{}) (int16, error) {
func (c *common) GetInt16(key any) (int16, error) {
var (
val int16
err error
@ -187,7 +187,7 @@ func (c *common) GetInt16(key interface{}) (int16, error) {
return val, err
}
func (c *common) GetInt32(key interface{}) (int32, error) {
func (c *common) GetInt32(key any) (int32, error) {
var (
val int32
err error
@ -196,7 +196,7 @@ func (c *common) GetInt32(key interface{}) (int32, error) {
return val, err
}
func (c *common) GetInt64(key interface{}) (int64, error) {
func (c *common) GetInt64(key any) (int64, error) {
var (
val int64
err error
@ -205,7 +205,7 @@ func (c *common) GetInt64(key interface{}) (int64, error) {
return val, err
}
func (c *common) GetFloat32(key interface{}) (float32, error) {
func (c *common) GetFloat32(key any) (float32, error) {
var (
val float32
err error
@ -214,7 +214,7 @@ func (c *common) GetFloat32(key interface{}) (float32, error) {
return val, err
}
func (c *common) GetFloat64(key interface{}) (float64, error) {
func (c *common) GetFloat64(key any) (float64, error) {
var (
val float64
err error
@ -223,7 +223,7 @@ func (c *common) GetFloat64(key interface{}) (float64, error) {
return val, err
}
func (c *common) GetBool(key interface{}) (bool, error) {
func (c *common) GetBool(key any) (bool, error) {
var (
val bool
err error
@ -232,7 +232,7 @@ func (c *common) GetBool(key interface{}) (bool, error) {
return val, err
}
func (c *common) GetString(key interface{}) (string, error) {
func (c *common) GetString(key any) (string, error) {
var (
val string
err error
@ -241,7 +241,7 @@ func (c *common) GetString(key interface{}) (string, error) {
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)
c.Lock()
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)
c.Lock()
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)
return exist
}
@ -284,8 +284,8 @@ func (c *common) Count() int {
return cnt
}
func (c *common) GetAll() map[interface{}]interface{} {
result := make(map[interface{}]interface{})
func (c *common) GetAll() map[any]any {
result := make(map[any]any)
c.RLock()
defer c.RUnlock()
for i := 0; i < c.segment; i++ {
@ -294,7 +294,7 @@ func (c *common) GetAll() map[interface{}]interface{} {
result[k] = v
}
} else {
c.syncMapDataTable[i].Range(func(key, value interface{}) bool {
c.syncMapDataTable[i].Range(func(key, value any) bool {
result[key] = value
return true
})
@ -308,9 +308,9 @@ func (c *common) GetAll() map[interface{}]interface{} {
// Author : go_developer@163.com<白茶清欢>
//
// Date : 9:48 下午 2021/9/15
func (c *common) GetAllForMapKeyString() map[string]interface{} {
func (c *common) GetAllForMapKeyString() map[string]any {
fullData := c.GetAll()
finalData := make(map[string]interface{})
finalData := make(map[string]any)
for k, v := range fullData {
finalData[fmt.Sprintf("%v", k)] = v
}
@ -353,7 +353,7 @@ func (c *common) Iterator(handleFunc IteratorFunc) {
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:42 2023/8/10
func (c *common) ToStruct(receiver interface{}) error {
func (c *common) ToStruct(receiver any) error {
if nil == receiver {
return errors.New("receiver is nil")
}
@ -372,7 +372,7 @@ func (c *common) ToStruct(receiver interface{}) error {
// Date : 20:44 2023/8/15
func (c *common) ToString() string {
mapData := c.GetAllForMapKeyString()
return serialize.JSON.MarshalForString(mapData)
return serialize.JSON.MarshalForStringIgnoreError(mapData)
}
// Filter 对数据进行过滤
@ -380,8 +380,14 @@ func (c *common) ToString() string {
// Author : go_developer@163.com<白茶清欢>
//
// Date : 16:25 2024/3/8
func (c *common) Filter(ignoreFieldList []string, rewriteFieldTable map[string]string) map[string]interface{} {
result := make(map[string]interface{})
func (c *common) Filter(ignoreFieldList []string, rewriteFieldTable map[string]string) map[string]any {
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)
for _, item := range ignoreFieldList {
ignoreFieldTable[item] = true
@ -399,3 +405,30 @@ func (c *common) Filter(ignoreFieldList []string, rewriteFieldTable map[string]s
}
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
// IteratorFunc 迭代函数, 返回值为是否继续迭代true 继续迭代 false 终止后续迭代
type IteratorFunc func(key interface{}, value interface{}) bool
type IteratorFunc func(key any, value any) bool
const (
normalDataTableType = "NORMAL"

View File

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

10
go.mod
View File

@ -4,12 +4,14 @@ go 1.21
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 (
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20230815040024-2b12dd51d19b // indirect
git.zhangdeman.cn/zhangdeman/serialize v0.0.0-20231224125439-01f39b6ea08d // indirect
github.com/BurntSushi/toml v1.3.2 // indirect
git.zhangdeman.cn/zhangdeman/consts v0.0.0-20241023090605-10cff9173059 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/Jeffail/gabs v1.4.0 // indirect
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // 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/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/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/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/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/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/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/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
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,
},
}
em.normalDataTable = make([]map[interface{}]interface{}, segmentCnt)
em.normalDataTable = make([]map[any]any, segmentCnt)
for i := 0; i < segmentCnt; i++ {
em.normalDataTable[i] = make(map[interface{}]interface{})
em.normalDataTable[i] = make(map[any]any)
}
em.common.initLock()
return em, nil