Compare commits
5 Commits
5a2df69ffe
...
master
Author | SHA1 | Date | |
---|---|---|---|
28a6c68e38 | |||
ce2d84d282 | |||
e2a2e6a3c2 | |||
9120cd2c68 | |||
ee1ff53593 |
50
abstruct.go
50
abstruct.go
@ -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
|
||||
}
|
||||
|
99
common.go
99
common.go
@ -22,11 +22,11 @@ import (
|
||||
//
|
||||
// Date : 15:52 2023/12/14
|
||||
type common struct {
|
||||
normalDataTable []map[interface{}]interface{} // 普通数组
|
||||
syncMapDataTable []sync.Map // sync_map类型
|
||||
dataTableType string // 数据表类型
|
||||
segment int // 分片熟练
|
||||
lock *sync.RWMutex // 数据锁
|
||||
normalDataTable []map[any]any // 普通数组
|
||||
syncMapDataTable []sync.Map // sync_map类型
|
||||
dataTableType string // 数据表类型
|
||||
segment int // 分片熟练
|
||||
lock *sync.RWMutex // 数据锁
|
||||
}
|
||||
|
||||
// initLock ...
|
||||
@ -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)
|
||||
}
|
||||
|
@ -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"
|
||||
|
2
error.go
2
error.go
@ -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
10
go.mod
@ -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
8
go.sum
@ -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=
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user