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:
- 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.
- 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.