我想实现一个并行化函数,在没有泛型的情况下,它看起来像这样:
func Parallelize(s []interface{}, c chan interface{}, f func(interface{}, chan interface{})) {
var wg sync.WaitGroup
defer wg.Done()
for _, si := range s {
wg.Add(1)
go f(si, c)
}
wg.Wait()
close(c)
}
我想启用传递任何类型的对象,但要确保第一个参数是对象切片,第二个是通道,第三个是接受对象和通道的函数。
显然,go 编译器不喜欢这些参数。它不允许我像这样调用这个函数:
a := make([]*A)
c := make(chan *A)
f := func(_a *A, _c chan A) {
...
}
Parallelize(a, c, f)
这样做的正确方法是什么?
UYOU
相关分类