Если main завершится — программа умрёт, и все горутины будут убиты мгновенно. Defer-ы в этих горутинах не выполнятся, данные могут потеряться. Это не panic и не graceful shutdown — просто мгновенная смерть процесса. Поэтому нужна синхронизация: WaitGroup, каналы, select с done-каналом, signal.Notify для перехвата SIGTERM. Типичная ошибка: go doWork() в main без ожидания — программа завершается мгновенно, и doWork даже не начинает работать. Всегда думай: "кто будет ждать эту горутину?".
Что если main завершится раньше горутин?
Junior
868 просмотровAFK Offer AI
Как работает go:embed?