Sobes.tech
Senior

Co się stanie, jeśli uruchomisz goroutine i wywołasz panic w niej?

sobes.tech AI

Odpowiedź od AI

Если в горутине вызвать panic, то эта паника будет локальной для этой горутины и приведёт к её аварийному завершению, если не будет обработана (recover).

Важно:

  • Паника в одной горутине не остановит другие горутины и не завершит всю программу, если она не произойдет в главной горутине.
  • Чтобы избежать краха всей программы, нужно использовать defer с recover внутри горутины для перехвата паники.

Пример:

go func() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Паника перехвачена в горутине:", r)
        }
    }()
    panic("что-то пошло не так")
}()

Без recover паника завершит выполнение этой горутины, но остальные продолжат работу.