Проверяет глубокое понимание горутин.
Если в горутине случается panic, она завершится аварийно. Это не влияет на другие горутины, но может привести к потере данных или недопониманию, если не используется recover.
Паника (panic) в Go останавливает выполнение текущей горутины, но:
Если паника происходит в main-горутина — программа аварийно завершится.
Если паника происходит в “фоновом” воркере — только эта горутина завершится, остальная программа продолжит работу.
С помощью defer + recover внутри каждой горутины:
go func() {
defer func() {
if r := recover(); r != nil {
log.Printf("Worker crashed: %v", r)
}
}()
process(task) // может вызвать панику
}()Практика:
Во всех production-воркерах (например, в worker pool) нужно оборачивать бизнес-логику в блок defer/recover, иначе вы не узнаете, что одна из горутин “упала”.