For loop 如何在go中并行运行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

我有一个for循环,它在字符串映射上迭代作为键(
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例程时,继续循环是无用的。若您需要在每次迭代中处理错误,则需要执行通道操作或按顺序执行此操作。