- 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
4条答案
按热度按时间fquxozlt1#
请在本问题中包含带有文档(但不包括实现)的新API。这使得人们更容易看到所提议的API。谢谢。
8xiog9wr2#
抱歉回复晚了。我已经修改了描述,请确认一下。
oxiaedzo3#
谢谢。我希望我们能找到一个比
GroupGenerics
更好的名字。eblbsuwk4#
我也这么认为。
GroupGenerics
并不代表角色。我们正在寻找好的想法。