Ответ
Да, можно. range для каналов позволяет итерировать по значениям, которые приходят в канал, пока канал не будет закрыт. После закрытия канала цикл завершается.
Пример:
ch := make(chan int)
go func() {
defer close(ch)
for i := 0; i < 3; i++ {
ch <- i
}
}()
for v := range ch {
fmt.Println(v) // Выведет 0, 1, 2
}
Важно: если канал не закрыть, range будет ждать новых значений, что может привести к deadlock.