看看 Singleflight

数据库68

在看前辈的代码时,发现了一个缓存放穿透的处理,好奇就点进去看了,发现代码意外的少,于是就研究起来,为数不多我能看明白的源码T-T

源码地址:https://cs.opensource.google/go/x/sync/+/036812b2:singleflight/singleflight.go
看看 Singleflight

```go
type call struct {
wg sync.WaitGroup
val interface{}
err error
forgotten bool
// 统计被拦截调用fn的请求数,可以不关心
dups int
// DoChan 中用的,先不关心
chans []chan 0
}

// 调用fn()
func (g Group) doCall(c call, key string, fn func() (interface{}, error)) {
normalReturn := false

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长