1 回答
TA贡献1829条经验 获得超13个赞
您计划选择的方式看起来ctx.Done()是正确的。
在我看来,你处理可变状态的方式是错误的。
尝试这样的事情:
var state = State{}
select {
case type <- typeChan
stats.Type = type
if (stats.OrderCount != nil) {
return stats
}
case count <- countChan
stats.OrderCount = count
if (stats.Type != nil) {
return stats
}
case <-ctx.Done()
return stats
}
现在你的函数应该是这样的:
go func() {
orderCount, err := s.Storage.GetOrderCount(ctx, customerUUID)
if err != nil {
return // Here you probably want to have errChan
}
if orderCount == 0 {
countChan <- "NA"
} else {
countChan <- strconv.Itoa(orderCount)
}
}()
这一切都有点粗略,因为您的示例非常复杂,但应该为您提供遵循的方向。
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报