for цикла, содержащего select, при получении сигнала из канала done?Простой break внутри select выходит только из select, а не из внешнего for. Чтобы выйти из цикла при получении сигнала из канала done, нужен labeled break.
Loop:
for {
select {
case <-done:
break Loop // выход из for
case data := <-ch:
process(data)
}
}
for {
select {
case <-done:
break // выходит только из select, цикл продолжается!
}
}
Метка Loop: ставится перед for, и break Loop передаёт управление за пределы цикла.