gpt4 book ai didi

go - 如何在 goroutine 中附加结构

转载 作者:数据小太阳 更新时间:2023-10-29 03:18:38 25 4
gpt4 key购买 nike

我有一个带有开关的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com