我们在开发时,有时会碰到一个接口的访问量突然上升,导致服务响应延迟或者宕机的情况。这时,除了利用缓存之外,也可以用到singlefilght
来解决,下面是一个简单的示例
package main
import (
"fmt"
"sync"
"sync/atomic"
"time"
"golang.org/x/sync/singleflight"
)
func main() {
g := singleflight.Group{
}
wg := sync.WaitGroup{
}
for i := 0; i < 100; i++ {
wg.Add(1)
go func(j int) {
defer wg.Done()
val, err, shared := g.Do("a", a)