golang как остановить горутину — Q&A Хекслет
2026-02-26 17:26 Diff

Ответы

В Go горутины могут быть остановлены только с помощью средств, предоставляемых самим языком. Все остановки горутин должны осуществляться добровольно и контролируемо.

Самый распространенный способ остановки горутины - это использование каналов для передачи сообщений. Вы можете создать канал, который будет использоваться для передачи сигналов об остановке горутины, и проверять его состояние в теле горутины. Если состояние канала указывает на необходимость остановки, горутина должна корректно завершить свою работу и выйти.

Вот пример кода, который демонстрирует использование канала для остановки горутины:

В этом примере главная горутина создает канал stop и запускает горутину worker с этим каналом в качестве параметра. Горутина worker работает бесконечным циклом, выполняя свою работу, и проверяет состояние канала stop в блоке select. Если канал получает сигнал об остановке, горутина завершает работу и возвращает управление. Главная горутина отправляет сигнал об остановке через канал stop после 5 секунд ожидания и ждет завершения горутины worker. После завершения работы горутины, программа завершается.

А если в default поставить time.Sleep(9999999999 * time.Second), через сколько завершится программа?

default: // Выполнение работы в горутине fmt.Println("Работаю...") time.Sleep(9999999999 * time.Second)