Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: go, golang, concurrency

Почему горутины в Go нельзя «убить» напрямую и как правильно останавливать фоновые задачи?

Вопрос проверяет понимание модели конкурентности в Go, механизма работы горутин и способов их завершения. Он показывает, знает ли кандидат про context, каналы и почему в языке нет «kill goroutine».

Короткий ответ

В Go нельзя напрямую убить горутину, потому что это сломало бы модель безопасности и могло оставить память в неконсистентном состоянии. Обычно используют context или каналы, через которые горутина получает сигнал «завершиться».

Длинный ответ

Горутины в Go — лёгкие потоки, управляемые рантаймом. У языка нет примитива типа kill(goroutine), потому что насильное завершение могло бы оставить общий объект в полусостоянии и вызвать гонки данных.

Правильный способ — организация кооперативного завершения:

  1. Прокидывается context.Context в каждую горутину.

  2. Внутри делается select { case <-ctx.Done(): return }.

  3. Родитель при необходимости вызывает cancel().

Пример:

ctx, cancel := context.WithCancel(context.Background())
go func() {
		for {
				select {
				case <-ctx.Done():
						fmt.Println("worker stopped")
						return
				default:
						// полезная работа
				}
		}
}()
time.Sleep(time.Second)
cancel()

Вывод: управление временем жизни горутин всегда должно быть явным, через context или каналы.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Golang

    Golang

Ключевые слова

#go

#golang

#concurrency

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.