Golang Recupera

Golang Recupera
La funzione di recupero Golang viene utilizzata per recuperare una goroutine da un panico. Pensalo come un blocco di prova/cattura in altri linguaggi di programmazione. Possiamo utilizzare il metodo Recover per recuperare il programma da un errore sollevato con un metodo di panico. Questo ci aiuta a gestire con grazia errori in caso di errori piuttosto che terminare il programma.

Esploriamo come possiamo usare il metodo Recover per recuperare un programma da un panico.

Metodo di recupero Golang

Il metodo di recupero è un metodo integrato definito nel pacchetto integrato. La sintassi della funzione è come mostrata:

Func Recover () Interface

Per implementare la funzione di recupero in modo appropriato, devono essere soddisfatte le seguenti condizioni:

  1. Chiama sempre la funzione di recupero all'interno di una funzione differita. Questo perché i metodi differiti non terminano nel caso di un panico. Questo li rende in grado di recuperare il programma una volta che si verifica un panico. Controlla il nostro tutorial su Golang Panic per saperne di più.
  2. Il metodo di recupero OS applicabile solo in una goroutine che incontra un panico. Se chiamato in una goroutine che non sperimenta il panico, il recupero non funziona.

Esempio 1

L'esempio seguente illustra come utilizzare il metodo di recupero.

Pacchetto principale
Importa "FMT"
func panic_me ()
panico ("sprecato!")

func main ()
Defer func ()
se rec: = recuper (); rec != nil
fmt.Println ("wow!, Sono salvato ")

()
panic_me ()
fmt.Println ("I Can't Run")

Nell'esempio sopra, creiamo una funzione che panico. All'interno della funzione principale, creiamo una funzione Defer che cerca di recuperare il programma. Se il recupero è di successo, stampa un messaggio all'interno del blocco if.

Se eseguiamo il programma sopra, dovremmo ottenere un output come mostrato:

$ go run Recover.andare
Accidenti!, Sono salvato

Si noti che il messaggio all'interno del blocco principale non esegue. Questo perché la funzione principale viene distrutta immediatamente dopo il panico. Solo il metodo differito può funzionare dopo un panico.

Esempio 2

L'esempio seguente illustra anche come recuperare un programma da un indice fuori vincolo.

Pacchetto principale
importazione (
"FMT"
"Runtime/debug"
)
func nonpanic ()
se rec: = recuper (); rec != nil
fmt.Println ("I quasi morto")

debug.PrintStack ()

func getValue (slice [] int, indice int)
if indice> (len (slice) - 1)
Panico ("Accesso illegale dell'indice!")

fmt.Println (slice [indice])

func main ()
SLC: = [] int 1, 2, 3
defer nonpanic ()
getValue (SLC, 5)

Nell'esempio sopra, creiamo una funzione che gestisce il panico usando il metodo di recupero e stampare la traccia dello stack usando il debug.Metodo PrintStack ().

Ora, se prova ad accedere a un elemento con un indice fuori vincolo, il metodo di recupero gestisce il panico.

Il codice sopra dovrebbe restituire un errore come:

Sono quasi morto
Goroutine 1 [Running]:
Runtime/Debug.Pila()
C:/Programmi/GO/SRC/Runtime/Debug/Stack.GO: 24 +0x65
Runtime/Debug.PrintStack ()
C:/Programmi/GO/SRC/Runtime/Debug/Stack.GO: 16 +0x19
principale.niente panico()
recuperare.GO: 15 +0x6a
Panic (0xa54b20, 0xa861b8)
C:/Programmi/GO/SRC/Runtime/Panic.GO: 1038 +0x215
principale.getValue (0xc0000cdf50, 0xc0000cdf70, 0x9c52b9, 0x60)
recuperare.GO: 19 +0x98
principale.principale()
recuperare.Vai: 33 +0x7e

Quanto sopra rappresenta la traccia dello stack mentre il programma panico.

Conclusione

In questo articolo, copriamo come recuperare un programma da un panico utilizzando il metodo di recupero. Abbiamo anche imparato a ottenere la traccia dello stack se un programma viene panico usando il debug.Metodo Panic ().