[英]Issue modifying map from goroutine func
scores := make(map[string]int)
percentage := make(map[string]float64)
total := 0
for i, ans := range answers {
answers[i] = strings.ToLower(ans)
}
wg := sync.WaitGroup{}
go func() {
wg.Add(1)
body, _ := google(question)
for _, ans := range answers {
count := strings.Count(body, ans)
total += count
scores[ans] += 5 // <------------------- This doesn't work
}
wg.Done()
}()
這是一小段代碼,我的問題是,我無法修改得分,我嘗試使用指針,嘗試正常進行操作,嘗試將其作為參數傳遞。
導入“同步”
WaitGroup等待goroutine的集合完成。 主goroutine調用添加以設置要等待的goroutine的數量。 然后,每個goroutine都會運行並在完成后調用Done。 同時,可以使用Wait來阻塞,直到所有goroutine完成。
您已為我們提供了無效的代碼片段。 請參閱如何創建最小,完整和可驗證的示例。
猜測,您對sync.WaitGroup
的使用看起來很奇怪。 例如,通過簡單地遵循sync.Waitgroup文檔中的說明,我希望得到的內容類似於以下內容:
package main
import (
"fmt"
"strings"
"sync"
)
func google(string) (string, error) { return "yes", nil }
func main() {
question := "question?"
answers := []string{"yes", "no"}
scores := make(map[string]int)
total := 0
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
defer wg.Done()
body, _ := google(question)
for _, ans := range answers {
count := strings.Count(body, ans)
total += count
scores[ans] += 5 // <-- This does work
}
}()
wg.Wait()
fmt.Println(scores, total)
}
游樂場: https : //play.golang.org/p/sZmB2Dc5RjL
輸出:
map[yes:5 no:5] 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.