Golang erholen sich

Golang erholen sich
Die Golang -Wiederherstellungsfunktion wird verwendet, um eine Goroutine aus einer Panik wiederherzustellen. Stellen Sie sich es in anderen Programmiersprachen wie einen Try/Catch -Block vor. Wir können mit der Wiederherstellungsmethode das Programm von einem von einer Panikmethode angesprochenen Fehler wiederherstellen. Dies hilft uns, Fehler bei Fehlern anmutig zu behandeln, anstatt das Programm zu beenden.

Lassen Sie uns untersuchen, wie wir mit der Wiederherstellungsmethode ein Programm aus einer Panik wiederherstellen können.

Golang -Wiederherstellungsmethode

Die Wiederherstellungsmethode ist eine integrierte Methode, die im GO-integrierten Paket definiert ist. Die Funktionssyntax ist wie gezeigt:

func recency rescop () Schnittstelle

Um die Wiederherstellungsfunktion angemessen zu implementieren, müssen die folgenden Bedingungen erfüllt sein:

  1. Rufen Sie immer die Wiederherstellungsfunktion in einer aufgeschobenen Funktion auf. Dies liegt daran, dass aufgeschobene Methoden, um im Fall einer Panik nicht zu enden. Dadurch können sie das Programm wiederherstellen, sobald eine Panik auftritt. Überprüfen Sie unser Tutorial über Golang Panic, um mehr zu erfahren.
  2. Die Wiederherstellung der Wiederherstellung der Methode OS ist nur in einer Goroutine anwendbar, die auf eine Panik stößt. Wenn eine Goroutine aufgerufen wird, die die Panik nicht erlebt, funktioniert die Erholung nicht.

Beispiel 1

Das folgende Beispiel zeigt, wie die Wiederherstellungsmethode verwendet wird.

Paket Main
importieren "fmt"
func Panic_me ()
Panik ("verschwendet!"))

func main ()
Defer func ()
wenn rec: = recover (); Rec != nil
fmt.Println ("Whew!, Ich bin gerettet")

())
Panic_me ()
fmt.Println ("Ich kann nicht rennen")

Im obigen Beispiel erstellen wir eine Funktion, die in Panik gerät. In der Hauptfunktion erstellen wir eine Aufschubfunktion, die versucht, das Programm wiederherzustellen. Wenn die Wiederherstellung Erfolg ist, druckt sie eine Nachricht im IF -Block aus.

Wenn wir das obige Programm ausführen, sollten wir wie gezeigt eine Ausgabe erhalten:

$ go run erholen.gehen
Wütend!, ich bin gerettet

Beachten Sie, dass die Nachricht im Hauptblock nicht ausgeführt wird. Dies liegt daran, dass die Hauptfunktion unmittelbar nach der Panik zerstört wird. Nur die aufgeschobene Methode kann nach einer Panik laufen.

Beispiel 2

Das folgende Beispiel zeigt auch, wie ein Programm aus einem ausgebundenen Index wiederhergestellt werden kann.

Paket Main
importieren (
"fmt"
"Laufzeit/Debugg"
)
func dontpanic ()
wenn rec: = recover (); Rec != nil
fmt.Println ("Ich bin fast gestorben")

debuggen.Printstack ()

Func GetValue (Slice [] int, Index int)
Wenn Index> (Len (Slice) - 1)
Panik ("illegaler Indexzugriff!"))

fmt.Println (Slice [Index])

func main ()
SLC: = [] int 1, 2, 3
Defer dontpanic ()
GetValue (SLC, 5)

Im obigen Beispiel erstellen wir eine Funktion, die die Panik mithilfe der Wiederherstellungsmethode behandelt, und druckt die Stapelverfolgung mit dem Debuggen aus.Printstack () Methode.

Wenn Sie nun versuchen, auf ein Element mit einem außer gebundenen Index zuzugreifen, übernimmt die Wiederherstellungsmethode die Panik.

Der obige Code sollte einen Fehler als:

Ich bin fast gestorben
Goroutine 1 [Running]:
Laufzeit/Debug.Stapel()
C:/Programmdateien/Go/SRC/Laufzeit/Debug/Stack.Go: 24 +0x65
Laufzeit/Debug.Printstack ()
C:/Programmdateien/Go/SRC/Laufzeit/Debug/Stack.Go: 16 +0x19
hauptsächlich.keine Panik()
genesen.Go: 15 +0x6a
Panik (0xa54b20, 0xa861b8)
C:/Programmdateien/Go/SRC/Laufzeit/Panik.Go: 1038 +0x215
hauptsächlich.GetValue (0xc0000CDF50, 0xc0000CDF70, 0x9c52b9, 0x60)
genesen.Go: 19 +0x98
hauptsächlich.hauptsächlich()
genesen.Go: 33 +0x7e

Die oben genannten stellen die Stapelverfolgung als Programmpanik dar.

Abschluss

In diesem Artikel behandeln wir, wie ein Programm mit der Wiederherstellungsmethode aus einer Panik wiederhergestellt werden kann. Wir haben auch gelernt, wie man die Stapelverfolgung bekommt, wenn ein Programm mit dem Debug in Panik gerät.Panik () Methode.