Как получить из канала, пока он не будет иметь значения в GO - PullRequest
0 голосов
/ 24 апреля 2019

Функция имеет цикл, который вызывает внутри нее подпрограмму go с пропущенным в нее каналом. После этого я пытаюсь получать данные от канала до тех пор, пока он не будет иметь значения.

Функция go передает значение в канале при каждом вызове.

Мой канал работает бесконечно.

func (m * StreamsDAO) FindOutput (входная модель. Вход) ([] model.Output, ошибка) {

// 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 голосов
/ 26 апреля 2019

Наконец получил ответ, используя WaitGroup.Поделиться ссылкой для полной справки: https://nathanleclaire.com/blog/2014/02/15/how-to-wait-for-all-goroutines-to-finish-executing-before-continuing/

...