Вопрос: Почему `main` может завершиться раньше goroutine и как это исправить?

Go Senior Без компании
Вопрос: Почему `main` может завершиться раньше goroutine и как это исправить?
Ответы
**Вариант 1: дождаться через канал** ```go done := make(chan struct{}) go func() { defer close(done) fmt.Println("work") }() <-done ``` **Вариант 2: `sync.WaitGroup`** ```go var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() fmt.Println("work") }() wg.Wait() ``` **Как это работает:** завершение `main()` завершает процесс. Нужна синхронизация, чтобы дождаться фоновой работы.