For loop 如何在go中并行运行for循环的内部方法?
我有一个for循环,它在字符串映射上迭代作为键(For loop 如何在go中并行运行for循环的内部方法?,for-loop,go,parallel-processing,channel,goroutine,For Loop,Go,Parallel Processing,Channel,Goroutine,我有一个for循环,它在字符串映射上迭代作为键(keyString),在类型为Data(sliceValue)的片段上迭代作为值。在for循环中,我有一个函数process(),它接受sliceValue和keyString,并对其执行一些操作 我希望对所有切片并行执行进程函数 我提到的代码如下所示: for keyString, sliceValue := range mapWithKeyStringAndSliceValue { result, err := process(key
keyString
),在类型为Data
(sliceValue
)的片段上迭代作为值。在for循环中,我有一个函数process()
,它接受sliceValue
和keyString
,并对其执行一些操作
我希望对所有切片并行执行进程
函数
我提到的代码如下所示:
for keyString, sliceValue := range mapWithKeyStringAndSliceValue {
result, err := process(keyString, sliceValue)
// some other code after this
}
正如我前面提到的,进程
函数应该对所有值并行执行
我看了这个,想了解一些情况,但它的操作有些不同。我是新的频道和围棋惯例,将感谢任何帮助 使用
sync.WaitGroup
并在go func中的循环内进行处理
wg := new(sync.WaitGroup)
for keyString, sliceValue := range mapWithKeyStringAndSliceValue {
wg.Add(1)
// put your sliceValue type instead of interface{}
go func(keyString string, sliceValue interface{}, wg *sync.WaitGroup) {
defer wg.Done()
result, err := process(keyString, sliceValue)
// some other code after this
}(keyString, sliceValue, wg)
}
wg.Wait()
如果您需要同步
result
和err
,那么执行process(…)
asyncSee相关:如果您不需要收集结果,只需将循环体放入函数(命名或匿名)中,并将其作为goroutine启动即可。如果您需要等待所有已启动的goroutines完成,请使用WaitGroup
。如果出现错误,我想返回,比如if err!=nil
我想返回这个错误,或者如果result==nil
那么我想继续循环当你在每次迭代中打开go例程时,继续循环是无用的。若您需要在每次迭代中处理错误,则需要执行通道操作或按顺序执行此操作。