我是 Golang 的新手,但正在努力理解这种伟大的语言!请帮我解决这个..我有2个香奈儿。“输入”和“输出”通道 in, out := make(chan Work), make(chan Work)我设置了在 chanel 中监听的 goroutines 工人,抓住工作并去做。我有一些工作,我会发送到香奈儿。当工作由工人完成时,它会写入 Out 通道。func worker(in <-chan Work, out chan<- Work, wg *sync.WaitGroup) { for w := range in { // do some work with the Work time.Sleep(time.Duration(w.Z)) out <- w } wg.Done()}完成所有工作后,我会在编写程序时关闭两个通道。现在我想在 OUT chanel 中写完成工作的结果,但在某些部分将所有内容分开,例如,如果工作类型是这样的:type Work struct { Date string WorkType string Filters []Filter}如果 WorkType 是“firstType”,我想将完成的工作发送到一个 chanel,如果 WorkType 是“secondType”到第二个 chan...但可能有 20 多种类型的工作..如何更好地解决这种情况道路?我可以在 chanel OUT 中设置 chanels 并从该子 chanels 中获取数据吗?ps:请原谅我的菜鸟问题,请..
1 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
您可以让输出通道通用,并使用类型开关处理不同的工作项。
假设您的输出通道只是chan interface{}.
就绪工作项的消费者将类似于:
for item := range output {
// in each case statement x will have the appropriate type
switch x := item.(type) {
case workTypeOne:
handleTypeOne(x)
case workTypeTwo:
handleTypeTwo(x)
// and so on...
// and in case someone sent a non-work-item down the chan
default:
panic("Invalid type for work item!")
}
}
并且处理程序处理特定类型,即
func handleTypeOne(w workTypeOne) {
....
}
- 1 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消