Чтение из закрытого канала вернёт оставшиеся значения из буфера, а когда буфер опустеет — zero value типа канала. Паники не будет.
Второе возвращаемое значение ok покажет, есть ли ещё данные:
v, ok := <-ch
// ok == false → канал закрыт и пуст
range по каналу автоматически завершится когда канал закрыт и опустел. А вот запись в закрытый канал — это panic.