Heim >Backend-Entwicklung >Golang >Kann Golang Panic den Standardfehler erfassen?

Kann Golang Panic den Standardfehler erfassen?

(*-*)浩
(*-*)浩Original
2019-12-17 10:17:562740Durchsuche

(Empfohlenes Lernen:

goKann Golang Panic den Standardfehler erfassen?) Gruppenzugriff außerhalb der Grenzen, Nullzeigerreferenz usw. Diese Laufzeitfehler führen zu Panikausnahmen.

Es gibt in Golang keine Anweisungen zum Abfangen von Ausnahmen wie try...catch..., aber zum Auslösen von Ausnahmen und zum Abfangen von Ausnahmen stehen integrierte Panic- und Recovery-Funktionen zur Verfügung. • Der Parametertyp von Panic und Recovery ist Interface{}, sodass jede Art von Objekt geworfen werden kann.

• Wenn im Programm ein schwerwiegender Fehler auftritt und das gesamte Programm nicht fortgesetzt werden kann, bietet Golang die Panikfunktion zum Beenden des Programms.

• Wenn ein Programm in Panik gerät, verwenden Sie die Wiederherstellung, um die Kontrolle über das Programm zurückzugewinnen .

• Nicht alle Panikausnahmen stammen aus der Laufzeit. Der direkte Aufruf der integrierten Panikfunktion führt ebenfalls zu Panikausnahmen.

• Die Panikfunktion akzeptiert jeden Wert als Parameter.

(1) Verwendung von Panik

① Fehler, die während des verzögerten Debuggens verursacht wurden, können durch nachfolgendes verzögertes Debuggen erfasst werden, es kann jedoch nur der letzte Fehler erfasst werden.

func test() {defer func() {
    fmt.Println(recover())
}()defer func() {
    panic("defer panic")
}()
    panic("test panic")
}func main() {
    test()    //defer panic}

②Wenn eine Funktion in Panik gerät, wird die Ausführung beendet. Nachdem alle Verzögerungsfunktionen ausgeführt wurden, kehrt die Programmsteuerung zum Aufrufer der Funktion zurück. Dieser Vorgang wird fortgesetzt, bis alle Funktionen der aktuellen Coroutine zurückkehren und beendet werden. Anschließend druckt das Programm Panikinformationen aus, druckt dann den Stack-Trace aus und schließlich wird das Programm beendet.

Wenn die Funktion nicht in Panik gerät, werden durch den Aufruf der Wiederherstellungsfunktion keine Informationen abgerufen und der aktuelle Prozess wird nicht beeinträchtigt.

Demo

package mainimport (    "fmt")func fullName(firstName *string, lastName *string) {    if firstName == nil {
        panic("Firsr Name can't be null")
    }    if lastName == nil {
        panic("Last Name can't be null")
    }
    fmt.Printf("%s %s\n", *firstName, *lastName)
    fmt.Println("returned normally from fullName")
}func test(){
    defer fmt.Println("deferred call in test")
    firName := "paul"
    fullName(&firName, nil)
}func main() {
    defer fmt.Println("deferred call in main")
    test()
    fmt.Println("returned normally from main")
}

Das obige ist der detaillierte Inhalt vonKann Golang Panic den Standardfehler erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn