如何在go中并行运行一个for循环内的方法?
How to run a method inside for loop in parallel in go?
我有一个 for 循环,它迭代一个字符串映射作为键 (keyString
) 和一个类型 Data
(sliceValue
) 的切片作为值。在那个 for 循环中,我有一个函数 process()
接受 sliceValue
和 keyString
并对其进行一些操作。
我希望 process
函数对所有切片并行执行。
我说的代码是这样的:
for keyString, sliceValue := range mapWithKeyStringAndSliceValue {
result, err := process(keyString, sliceValue)
// some other code after this
}
正如我上面提到的,process
函数应该对所有 sliceValues 并行执行。
我查看了这个 question 以了解一些想法,但它有一些不同的操作要做。我是 channel 和 go routines 的新手,非常感谢任何帮助!
使用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()
我有一个 for 循环,它迭代一个字符串映射作为键 (keyString
) 和一个类型 Data
(sliceValue
) 的切片作为值。在那个 for 循环中,我有一个函数 process()
接受 sliceValue
和 keyString
并对其进行一些操作。
我希望 process
函数对所有切片并行执行。
我说的代码是这样的:
for keyString, sliceValue := range mapWithKeyStringAndSliceValue {
result, err := process(keyString, sliceValue)
// some other code after this
}
正如我上面提到的,process
函数应该对所有 sliceValues 并行执行。
我查看了这个 question 以了解一些想法,但它有一些不同的操作要做。我是 channel 和 go routines 的新手,非常感谢任何帮助!
使用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()