Могу ли я выполнить действие для всех элементов среза одновременно?
У меня есть следующий код:
func myfunction() {
results := make([]SomeCustomStruct, 0)
// ... results gets populated ...
for index, value := range results {
results[index].Body = cleanString(value.Body)
}
// ... when done, more things happen ...
}
func cleanString (in string) (out string) {
s := sanitize.HTML(in)
s = strings.Replace(s, "\n", " ", -1)
out = strings.TrimSpace(s)
return
}
Срез никогда не будет содержать более 100 или около того записей. Есть ли способ, как я могу использовать здесь подпрограммы для выполнения функции cleanString для каждого элемента среза одновременно, а не по одному?
Спасибо!
1 ответ
Решение
Если срез имеет только 100 элементов или меньше, и это все cleanString
вы не получите большого ускорения, если строки тела не будут достаточно большими.
Распараллеливание его с goroutines будет выглядеть примерно так:
var wg sync.WaitGroup
for index, value := range results {
wg.Add(1)
go func(index int, body string) {
defer wg.Done()
results[index].Body = cleanString(body)
}(index, value.Body)
}
wg.Wait()