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

我是 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:请原谅我的菜鸟问题,请..


阿晨1998
浏览 138回答 1
1回答

墨色风雨

您可以让输出通道通用,并使用类型开关处理不同的工作项。假设您的输出通道只是chan interface{}.就绪工作项的消费者将类似于:for item := range output {&nbsp; &nbsp;// in each case statement x will have the appropriate type&nbsp; &nbsp;switch x := item.(type) {&nbsp; &nbsp; &nbsp; &nbsp;case workTypeOne:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handleTypeOne(x)&nbsp; &nbsp; &nbsp; &nbsp;case workTypeTwo:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handleTypeTwo(x)&nbsp; &nbsp; &nbsp; &nbsp;// and so on...&nbsp; &nbsp; &nbsp; &nbsp;// and in case someone sent a non-work-item down the chan&nbsp; &nbsp; &nbsp; &nbsp;default:&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; panic("Invalid type for work item!")&nbsp; &nbsp;}}并且处理程序处理特定类型,即func handleTypeOne(w workTypeOne) {&nbsp;&nbsp; &nbsp; ....}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go