为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 goroutine 中追加结构体

如何在 goroutine 中追加结构体

Go
潇潇雨雨 2023-07-10 14:37:41
我有一个带有开关的 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 中。



查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信