【问题标题】:Can I perform an action on all slice items at once in go?我可以一次对所有切片项目执行操作吗?
【发布时间】:2016-07-26 16:08:37
【问题描述】:

我有以下代码:

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 函数,而不是一个一个地执行?

谢谢!

【问题讨论】:

    标签: multithreading go concurrency goroutine


    【解决方案1】:

    如果切片只有 100 个或更少的项目,并且这是 cleanString 的全部,那么除非正文字符串相当大,否则您不会获得很多加速。

    用 goroutine 并行化它看起来像这样:

    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()
    

    【讨论】:

    • 完美,谢谢。是的,我预计不会有很大的提升,但我对本金也很感兴趣 :)
    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2018-07-24
    • 2021-11-23
    相关资源
    最近更新 更多