2016-07-26 61 views
0

我有以下代碼:我可以一次執行所有切片項目的動作嗎?

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個左右的項目。有沒有什麼辦法可以在這裏利用goroutine來同時對每個slice項目執行cleanString函數,而不是一個一個地執行?

謝謝!

回答

3

如果切片只有100個或更少的項目,並且這是整個cleanString,那麼除非主體字符串相當大,否則不會獲得大量加速。

有夠程並行化它看起來是這樣的:

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

完美,謝謝。是的,我不期望有巨大的提升,但我也對委託人感興趣:) – JimBlizz

相關問題