Golang wyzdrowieje

Golang wyzdrowieje
Funkcja odzyskiwania Golanga służy do odzyskania goroutiny z paniki. Pomyśl o tym jak o bloku prób/catch w innych językach programowania. Możemy użyć metody odzyskiwania, aby odzyskać program z błędu podniesionego metodą paniki. Pomaga nam to z wdziękiem radzić sobie z błędami w przypadku błędów, a nie zakończenie programu.

Pozwól nam zbadać, w jaki sposób możemy wykorzystać metodę odzyskiwania, aby odzyskać program z paniki.

Metoda odzyskiwania Golang

Metoda odzyskiwania to wbudowana metoda zdefiniowana w wbudowanym pakiecie Go. Składnia funkcji jest jak pokazana:

Func Recovery () interfejs

Aby odpowiednio wdrożyć funkcję odzyskiwania, należy spełnić następujące warunki:

  1. Zawsze wywołuje funkcję odzyskiwania w funkcji odroczonej. Wynika to z faktu, że odroczone metody nie kończą się w przypadku paniki. To sprawia, że ​​są w stanie odzyskać program po wystąpieniu paniki. Sprawdź nasz samouczek na Golang Panic, aby dowiedzieć się więcej.
  2. Metoda odzyskiwania systemu OS dotyczy tylko w goroutinie, która napotyka panikę. Jeśli wezwano go w goroutine, która nie doświadcza paniki, odzyskiwanie nie działa.

Przykład 1

Poniższy przykład ilustruje sposób korzystania z metody odzyskiwania.

Pakiet Main
importować „fmt”
FUNC PANIC_ME ()
Panika (”zmarnowana!")

func main ()
Defer func ()
jeśli rec: = odzysk (); Rec != zero
fmt.Println ("!, Jestem uratowany ”)

()
Panic_me ()
fmt.Println („I Can't Run”)

W powyższym przykładzie tworzymy funkcję paniki. W ramach głównej funkcji tworzymy funkcję odroczenia, która próbuje odzyskać program. Jeśli odzysk jest sukcesem, drukuje wiadomość wewnątrz bloku if.

Jeśli uruchomimy powyższy program, powinniśmy uzyskać wyjście, jak pokazano:

$ Go Run Regened.Iść
Uff!, Jestem zbawiony

Zauważ, że wiadomość wewnątrz głównego bloku nie jest wykonywana. Wynika to z faktu, że główna funkcja jest niszczona natychmiast po panice. Tylko metoda odroczona może działać po panice.

Przykład 2

Poniższy przykład ilustruje również, jak odzyskać program z indeksu poza związanym.

Pakiet Main
import (
„FMT”
„Czas wykonywania/debug”
)
func dontPanic ()
jeśli rec: = odzysk (); Rec != zero
fmt.Println („prawie umarłem”)

odpluskwić.Printstack ()

func getValue (slice [] int, index int)
Jeśli indeks> (len (slice) - 1)
Panika („Nielegalny dostęp do indeksu!")

fmt.Println (plaster [indeks])

func main ()
slc: = [] int 1, 2, 3
Defer Dontpanic ()
getValue (SLC, 5)

W powyższym przykładzie tworzymy funkcję, która obsługuje panikę za pomocą metody odzyskiwania i drukuje ślad stosu za pomocą debugowania.Metoda printstack ().

Teraz, jeśli spróbuj uzyskać dostęp do elementu o poza nim, metoda odzyskiwania obsługuje panikę.

Powyższy kod powinien zwrócić błąd jako:

prawie umarłem
Goroutine 1 [bieganie]:
Czas wykonawczy/debugowanie.Stos()
C:/program programu/go/src/runtime/debug/stos.GO: 24 +0x65
Czas wykonawczy/debugowanie.Printstack ()
C:/program programu/go/src/runtime/debug/stos.GO: 16 +0x19
główny.nie panikować()
odzyskiwać.GO: 15 +0x6a
Panic (0xa54b20, 0xa861b8)
C:/Pliki programowe/Go/src/runtime/Panic.GO: 1038 +0x215
główny.getValue (0xc0000cdf50, 0xc0000cdf70, 0x9c52b9, 0x60)
odzyskiwać.GO: 19 +0x98
główny.główny()
odzyskiwać.GO: 33 +0x7E

Powyższe reprezentują ślad stosu, gdy program panika.

Wniosek

W tym artykule omawiamy, jak odzyskać program z paniki za pomocą metody odzyskiwania. Nauczyliśmy się również, jak uzyskać śledzenie stosu, jeśli program panikuje za pomocą debugowania.Panic () Method.