如何从通道接收直到它在GO中具有值

时间:2019-04-24 11:19:12

标签: go channel goroutine

一个函数具有循环,该循环在内部调用go例程,并传递一个通道。 之后,我尝试从通道接收直到它具有值。

go函数在每次调用时在通道中传递值。

我的频道无限播放。

func(m * StreamsDAO)FindOutput(输入模型。输入)([]模型。输出,错误){

// SOME CODE

var chanNumber int = (input.EndTime - input.StartTime)/60
outputChan := make(chan model.Output, chanNumber)
for i := input.StartTime; i < input.EndTime ;i = i+(slider*60) {

// SOME CODE

    go ForEachSlide(i, outputChan)
    for outputC := range outputChan {
        outputs = append(outputs, outputC)
    }
}
return outputs, err

}

func ForEachSlide(i int,outputChan chan model.Output){

// SOME CODE

outputChan <- output
//  close(outputChan)

}

它无限循环,因为没有停止从通道接收。 如果使用关闭通道,则仅从通道中接收单个元素,这与预期的一样,但是我需要通道中的所有值。

1 个答案:

答案 0 :(得分:0)

最后使用WaitGroup得到了答案。分享链接以获取完整参考: https://nathanleclaire.com/blog/2014/02/15/how-to-wait-for-all-goroutines-to-finish-executing-before-continuing/