簡體   English   中英

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

[英]How to receive from channel till it has values in GO

一個函數有一個循環,它調用一個內部的 go 例程,並傳入一個通道。 在此之后,我嘗試從頻道接收直到它有值。

go 函數在每次調用時在 channel 中傳遞值。

我的頻道無限運行。

func (m *StreamsDAO) FindOutput(input model.Input) ([]model.Output, error) {

// 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)

}

它無限循環,因為不停地從頻道接收。 如果使用關閉通道,則僅按預期從通道接收單個元素,但我需要通道中的所有值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM