作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个带有开关的 goroutine,它想将一个接口(interface)附加到一个结构,但是当运行它时我没有收到错误,但它没有附加任何响应你如何在 Go 中编写它以使其并发安全?
这是我的代码:
var wg sync.WaitGroup
for _, 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{}
}
最佳答案
在 goroutine 之前执行 wg.Add(1)
。无法保证 goroutine 中的任何逻辑在您到达 wg.Wait()
之前完成,所以不要将 wg.Add(1)
放在协程。
关于go - 如何在 goroutine 中附加结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57316786/
我是一名优秀的程序员,十分优秀!