根据docs执行以下操作可防止数据竞争:
var wg sync.WaitGroup
wg.Add(5)
for i := 0; i < 5; i++ {
go func(j int) {
fmt.Println(j) // Good. Read local copy of the loop counter.
wg.Done()
}(i)
}
wg.Wait()
但是如果我有以下代码:
type Job struct {
Work []string
}
var Queue chan Job
func work(id string, type int32) {
job := Job{Work: []string{"A","B","C"}}
go func(j Job, ty int32) {
if ty == 1 {
// do some other task
}
Queue <- j
} (job, type) // RACE ON THIS LINE
if type == 1 {
// do something
}
return
}
通过调用工作。 GRPC。
数据竞争检测器告诉我,go例程正在产生数据竞争。我在想这里有一些我在这里缺少的东西,但似乎无法找到它。