В спецификации языка программирования Go сказано следующее об отправке на канал:
Коммуникационные блоки, пока отправка не может быть продолжена. Отправка по небуферизованному каналу может продолжаться, если получатель готов. Отправка по буферизованному каналу может продолжаться, если в буфере есть место.
Так что, когда ваш код достигает значения stop <- 0
, он блокирует ожидание другой программы для чтения из канала, и это никогда не происходит ( ваш case <- stop:
находится в пределах той же самой подпрограммы go, поэтому он не активен).
Существует несколько способов решения этой проблемы:
- Использование буферизованного канала (например,
stop := make(chan int, 1)
). - Ожидание остановки в другой подпрограмме go ( пример )
- Закрыть канал вместо отправки чего-либо на него (
close(stop)
).
Примечание: из-за того, как написано ваше приложение, ни один из этих вариантов не остановит его, потому что ваш для l oop никогда не завершается (добавьте break
или return
для выхода).