Что нужно учитывать при старте горутины

«Что нужно учитывать при старте горутины» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При старте горутины важно учитывать:

  1. Утечки горутин - всегда должен быть механизм остановки (через каналы, context или sync.WaitGroup)
  2. Паники - неотловленные паники в горутине крашат всю программу
  3. Передача параметров - передавайте параметры явно, не полагайтесь на замыкания (может быть race condition)

Пример безопасного запуска:

func worker(ctx context.Context, wg *sync.WaitGroup, param int) {
    defer wg.Done()
    for {
        select {
        case <-ctx.Done():
            return
        default:
            // работа
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    var wg sync.WaitGroup
    wg.Add(1)
    go worker(ctx, &wg, 42)
    // ...
    cancel() // сигнал остановки
    wg.Wait() // ожидание завершения
}