refactor: 优化 solo.guid 的使用,命名空间需要注册

This commit is contained in:
kercylan 2023-07-21 23:18:34 +08:00
parent 506e0f2ee4
commit 6238883dc9
1 changed files with 30 additions and 24 deletions

View File

@ -1,37 +1,43 @@
package sole package sole
import "sync" import (
"sync/atomic"
var (
global int64
namespace map[any]int64
mutex sync.Mutex
) )
func init() { var (
namespace = map[any]int64{} global atomic.Int64 // 全局唯一标识符
namespace = map[any]*atomic.Int64{} // 唯一标识符命名空间
)
// RegNameSpace 注册特定命名空间的唯一标识符
func RegNameSpace(name any) {
if namespace == nil {
namespace = map[any]*atomic.Int64{}
}
namespace[name] = new(atomic.Int64)
} }
// UnRegNameSpace 解除注销特定命名空间的唯一标识符
func UnRegNameSpace(name any) {
delete(namespace, name)
}
// Get 获取全局唯一标识符
func Get() int64 { func Get() int64 {
global++ return global.Add(1)
return global
} }
// Reset 重置全局唯一标识符
func Reset() {
global.Store(0)
}
// GetWith 获取特定命名空间的唯一标识符
func GetWith(name any) int64 { func GetWith(name any) int64 {
namespace[name]++ return namespace[name].Add(1)
return namespace[name]
} }
func GetSync() int64 { // ResetWith 重置特定命名空间的唯一标识符
mutex.Lock() func ResetWith(name any) {
defer mutex.Unlock() namespace[name].Store(0)
global++
return global
}
func GetSyncWith(name any) int64 {
mutex.Lock()
defer mutex.Unlock()
namespace[name]++
return namespace[name]
} }