Примечание: Я искал эту тему в Google и прочитал почти все, что смог найти, но все еще не могу получить правильный / разумный / готовый к работе ответ.
В основном все ответы похожиТочно так же, как этот: как остановить процедуру , все по одному шаблону, без исключения: настоящая работа - fmt.Println(1)
напечатать что-то или просто // Do other stuff
,
Но если держать реальную работу на for select default case branch
, то она будет выполняться несколько раз, для печати чего-то это нормально, но, очевидно, она не готова к реальной работе.
Единственный верный подход, который я могу себе представить, этопоместите реальную работу в ветвь кейса, а затем отправьте только один сигнал к этому кейсу, чтобы уведомить его о начале, как здесь: детская площадка , но просто волнуйтесь, и при таком подходеэто может создать некоторые проблемы?
Добавлены фрагменты кода, чтобы показать, чего именно я пытаюсь достичь: https://play.golang.org/p/7xjjiW7XdoQ, Я хочу достичь, когда клиент закроет соединение, а затем немедленно прекратить мой обработчик, отпуститьиспользуйте ресурсы и выйдите безоговорочно.