Вопрос: Почему `main` может завершиться раньше goroutine и как это исправить?
Go
Junior
Без компании
Вопрос: Почему `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()` завершает процесс. Нужна синхронизация, чтобы дождаться фоновой работы.