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

golang,gouroutines,如何在另一个chanel中设置chanel

golang,gouroutines,如何在另一个chanel中设置chanel

Go
阿晨1998 2021-12-07 19:02:23
我是 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) { 

    ....

}


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

添加回答

举报

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