- 原包名 single 名不达意,实为 string→int64 并发计数器;类型 Single→Counter, 方法签名不变(Init/Get/Incr/Set),附测试、例程与 README
35 lines
703 B
Go
35 lines
703 B
Go
// 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"))
|
|
}
|