for v := range ch читает значения из канала, пока он не закрыт. После закрытия цикл завершается. Если канал не закрыть, range будет ждать вечно - типичная причина deadlock.
for v := range ch
for v := range ch { process(v) }