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()
}()
这是一段代码,我的问题是,我无法修改分数,我尝试使用指针,我尝试过正常,我已经尝试将其作为参数传递。
答案 0 :(得分:2)
导入&#34;同步&#34;
WaitGroup等待完成goroutine的集合。主要的 goroutine调用Add来设置要等待的goroutines的数量。然后 每个goroutine运行并在完成后调用Done。在同一个 时间,等待可以用来阻止所有goroutines完成。
您向我们提供了一个不起作用的代码片段。见How to create a Minimal, Complete, and Verifiable example.
作为猜测,您使用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