go proposal: x/sync/singleflight: add generic API

93ze6v8z  于 5个月前  发布在  Go
关注(0)|答案(4)|浏览(50)
  • singleflight 是一个很棒的库,但是参数函数的返回值使用了 interface{}。如果你使用泛型,只需简单地传递一个类型就可以使其成为一个灵活的函数。
  • 为了兼容性,将其定义为与 singleflight.Group 不同的名称,例如 singleflight.GroupGenerics
  • singleflight.GroupGenerics 除了 singleflight 还导出了 Do()DoChan()Forget() 这三个函数。
  • singleflight.GroupGenerics 具有以下类型、参数和返回值。
type GroupGenerics[V any] struct {
	mu sync.Mutex          // protects m
	m  map[string]*call[V] // lazily initialized
}

func (g *GroupGenerics[V]) Do(key string, fn func() (V, error)) (v V, err error, shared bool)
func (g *GroupGenerics[V]) DoChan(key string, fn func() (V, error)) <-chan Result
func (g *GroupGenerics[V]) Forget(key string)

我修改了现有的 API 以尝试一下。请参考它。
https://github.com/catatsuy/sync/pull/1/files

fquxozlt

fquxozlt1#

请在本问题中包含带有文档(但不包括实现)的新API。这使得人们更容易看到所提议的API。谢谢。

8xiog9wr

8xiog9wr2#

抱歉回复晚了。我已经修改了描述,请确认一下。

oxiaedzo

oxiaedzo3#

谢谢。我希望我们能找到一个比GroupGenerics更好的名字。

eblbsuwk

eblbsuwk4#

我也这么认为。GroupGenerics并不代表角色。我们正在寻找好的想法。

相关问题