singleflight提供了一种抑制重复函数调用的机制

type Group

组表示一类工作,并形成一个名称空间,其中的工作单元可以执行重复抑制

  1. type Group struct {
  2. // contains filtered or unexported fields
  3. }
  4. // Do执行并返回给定函数的结果,确保每次对给定键只执行一次。
  5. // 如果传入一个重复的调用者,重复的调用者将等待原始调用者完成并接收相同的结果
  6. // 返回值shared表示是否将v分配给了多个调用者
  7. func (g *Group) Do(key string, fn func() (interface{}, error)) (v interface{}, err error, shared bool)
  8. // 取消对一个建的缓存,再次执行 Do 会真实调用实质函数
  9. func (g *Group) Forget(key string)