Чтение из закрытого канала не блокирует: возвращается zero value типа элемента. В форме v, ok := <-ch второй результат ok будет false, если канал закрыт и буфер пуст.
for {
v, ok := <-ch
if !ok {
break // канал закрыт
}
use(v)
}
// или просто: for v := range ch { ... }
for range ch завершается автоматически при закрытии канала.