feat(counter): go-hua/single 迁入并更名 counter(键值计数器)
- 原包名 single 名不达意,实为 string→int64 并发计数器;类型 Single→Counter, 方法签名不变(Init/Get/Incr/Set),附测试、例程与 README
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
// counter 包示例:线程安全的键值计数器(并发场景下按 key 累加/读取/覆盖)
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"git.zeroonesoft.cn/golib/zogo/counter"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var counters counter.Counter
|
||||
counters.Init()
|
||||
|
||||
// 并发安全计数
|
||||
var wg sync.WaitGroup
|
||||
for i := 0; i < 100; i++ {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
counters.Incr("pv", 1)
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
fmt.Println("并发 100 次 Incr 后 pv:", counters.Get("pv"))
|
||||
|
||||
// Set 覆盖并返回旧值
|
||||
old := counters.Set("pv", 0)
|
||||
fmt.Println("Set 返回旧值:", old, "新值:", counters.Get("pv"))
|
||||
|
||||
// 不同 key 相互独立
|
||||
counters.Incr("uv", 1)
|
||||
fmt.Println("uv:", counters.Get("uv"))
|
||||
}
|
||||
Reference in New Issue
Block a user