我有一个带有开关的 goroutine,它想要将一个接口附加到一个结构体,但是当运行它时,我没有收到错误,但它没有附加任何响应,你如何在 Go 中编写它以使其并发安全?这是我的代码:var wg sync.WaitGroupfor _, v := range inputParameters.Entities { go func(v domain.Entity) { wg.Add(1) defer wg.Done() var f func( v domain.Entity, result *domain.Resoponse, )(interface{}, Error) // Signature of all Get methods switch v.Name { case "process1": f = 1Processor{}.Get case "process2": f = 2Processor{}.Get case "process3": f = 3Processor{}.Get default: return } res, err := f(v, result) if err != nil { mapError.Error = append(mapError.Error, err) } else { result.Mu.Lock() defer result.Mu.Unlock() result.Entities = append(result.Entities, res) } }(v)}wg.Wait()return result, mapError作为参考,这里是Response类型:type Resoponse struct { Mu sync.Mutex Entities []interface{}}
1 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
wg.Add(1)
在 goroutine 之前执行。无法保证 goroutine 中的任何逻辑在您到达之前就已完成,wg.Wait()
因此不要将wg.Add(1)
s 放入 goroutine 中。
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消