Sobes.tech
Middle

Co się stanie, jeśli uruchomisz gorutynę i wywołasz panic w jej środku? Gorutyna się zatrzyma czy cała aplikacja?

sobes.tech AI

Odpowiedź od AI

Jeśli w goroutine wystąpi panic, to ta konkretna goroutine się zatrzyma, ale cała aplikacja jako całość nie zostanie automatycznie zamknięta. Panic w goroutine nie powoduje zatrzymania wszystkich goroutine lub programu, chyba że osiągnie poziom korzenia i pozostanie nieobsłużony.

Aby uniknąć nagłego zamknięcia aplikacji, można użyć recover wewnątrz tej samej goroutine lub w funkcji wywołującej, aby przechwycić panic i obsłużyć go.

Przykład:

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

W tym przykładzie panic nie spowoduje zatrzymania całej aplikacji, a zostanie obsłużony wewnątrz goroutine.