walkFiles
, который не был воспроизведен в вашем вопросе, но который является ключом к его пониманию, имеет следующую подпись:
func walkFiles(done <-chan struct{}, root string) (<-chan string, <-chan error)
Таким образом, в вашем цитируемом коде paths
- это не «коллекция» (то есть фрагмент), это канал . Когда каждый из рабочих читает из канала, он вытаскивает следующий путь из канала. Следующий рабочий, который получит из канала, не получит тот же путь, он получит следующий после этого.
Все три аргумента digester
являются каналами:
func digester(done <-chan struct{}, paths <-chan string, c chan<- result)
done
используется для указания рабочим, что они должны остановиться, даже если работа все еще находится в очереди.
paths
- рабочая очередь, из которой рабочие получают пути.
c
- канал, по которому рабочие отправляют результаты.