我可以一次对所有切片项目执行操作吗?
Can I perform an action on all slice items at once in go?
我有以下代码:
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 个左右的条目。有什么办法可以在这里利用 goroutines 同时对每个切片项目执行 cleanString 函数,而不是一个一个地执行?
谢谢!
如果切片只有 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()
我有以下代码:
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 个左右的条目。有什么办法可以在这里利用 goroutines 同时对每个切片项目执行 cleanString 函数,而不是一个一个地执行?
谢谢!
如果切片只有 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()