- 原包名 single 名不达意,实为 string→int64 并发计数器;类型 Single→Counter, 方法签名不变(Init/Get/Incr/Set),附测试、例程与 README
42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
// Package counter 提供线程安全的 string→int64 键值计数器,适合并发计数场景。
|
|
//
|
|
// 迁移自 go-hua/single 并更名(原类型 Single → Counter),方法签名不变。
|
|
package counter
|
|
|
|
import "sync"
|
|
|
|
// Counter 线程安全的键值计数器(使用前需调用 Init)
|
|
type Counter struct {
|
|
mu sync.Mutex
|
|
values map[string]int64
|
|
}
|
|
|
|
// Init 初始化内部存储(每个 Counter 实例使用前调用一次)
|
|
func (c *Counter) Init() {
|
|
c.values = make(map[string]int64)
|
|
}
|
|
|
|
// Get 读取指定 key 的值,key 不存在返回 0
|
|
func (c *Counter) Get(key string) int64 {
|
|
c.mu.Lock()
|
|
defer c.mu.Unlock()
|
|
return c.values[key]
|
|
}
|
|
|
|
// Incr 按指定增量累加 key 的值,返回累加后的值
|
|
func (c *Counter) Incr(key string, value int64) int64 {
|
|
c.mu.Lock()
|
|
defer c.mu.Unlock()
|
|
c.values[key] += value
|
|
return c.values[key]
|
|
}
|
|
|
|
// Set 覆盖指定 key 的值,返回旧值
|
|
func (c *Counter) Set(key string, val int64) int64 {
|
|
c.mu.Lock()
|
|
defer c.mu.Unlock()
|
|
old := c.values[key]
|
|
c.values[key] = val
|
|
return old
|
|
}
|