Как правильно завершить горутину?

Middle
1.4k просмотров
AFK Offer AI

Лучший способ — через context или канал-сигнал. Создаёшь ctx, cancel := context.WithCancel(parentCtx), передаёшь ctx в горутину, внутри слушаешь <-ctx.Done() в select. Когда нужно остановить — вызываешь cancel(). Альтернатива — done-канал: close(done) и все читатели получают сигнал. Никогда не используй runtime.Goexit() или общие флаги без синхронизации. Горутина должна сама решать когда и как завершиться, а не убиваться снаружи.

Следующий вопрос

Как сериализовать/десериализовать JSON?