1 回答
TA贡献1878条经验 获得超4个赞
有几种方法可以做到这一点,但我认为最好的方法是不要这样做。这是最好保持明确的常见模式之一,因为它更易于阅读和维护。但是,如果你坚持:
一种方法是意识到您实际上并不需要传递切片元素:
func Parallelize(n int, c chan interface{}, f func(int, chan interface{})) {
var wg sync.WaitGroup
defer wg.Done()
for i:=0;i<n;i++ {
wg.Add(1)
go f(i, c)
}
wg.Wait()
close(c)
}
并使用以下方法调用它:
Parallelize(len(slice), ch, func(i int,ch chan interface{}) {
// use slice[i]
})
您也不需要通过通道:
func Parallelize(n int, f func(int)) {
var wg sync.WaitGroup
defer wg.Done()
for i:=0;i<n;i++ {
wg.Add(1)
go f(i)
}
wg.Wait()
}
并称之为:
Parallelize(len(slice), func(i int) {
// use slice[i] and chan ch
})`
close(ch)
另一种方法是使用反射。它会更丑陋,你将不得不处理运行时错误而不是编译时错误。
- 1 回答
- 0 关注
- 134 浏览
添加回答
举报