Sobes.tech
Junior — Middle

Jakie są różnice między paniką a krytycznym błędem, który zatrzymuje wykonywanie programu?

sobes.tech AI

Odpowiedź od AI

W języku Go panic to mechanizm, który uruchamia się w przypadku krytycznego błędu podczas wykonywania programu, na przykład wyjścia poza zakres tablicy lub jawnego wywołania panic(). panic powoduje natychmiastowe przerwanie normalnego wykonywania bieżącej goroutine i rozpoczyna proces "rozpakowywania" stosu (stack unwinding), wywołując funkcje defer. Jeśli panic nie zostanie obsłużony za pomocą recover(), program zakończy się błędem.

Krytyczny błąd, który zatrzymuje wykonywanie programu, może być spowodowany przez panic, ale także przez fatalne błędy na poziomie systemu (np. błąd segmentacji), które nie mogą być obsłużone w kodzie.

Główne różnice:

  • Panic — kontrolowany mechanizm, który można przechwycić i obsłużyć za pomocą recover().
  • Błąd krytyczny — może być nieobsługiwalny, prowadząc do natychmiastowego zakończenia programu bez możliwości odzyskania.

Przykład użycia panic i recover:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Odzyskano po panic:", r)
        }
    }()
    panic("coś poszło nie tak")
}

func main() {
    mayPanic()
    fmt.Println("Program kontynuuje działanie")
}