Maison > développement back-end > Golang > La panique golang peut-elle capturer l'erreur standard ?

La panique golang peut-elle capturer l'erreur standard ?

(*-*)浩
Libérer: 2019-12-17 10:17:56
original
2701 Les gens l'ont consulté

(Apprentissage recommandé :

goLa panique golang peut-elle capturer l'erreur standard ?) groupe Accès hors limites, référence de pointeur nul, etc. Ces erreurs d'exécution provoqueront des exceptions de panique.

Il n'y a pas d'instructions de capture d'exception telles que try...catch... dans Golang, mais les fonctions intégrées de panique et de récupération sont fournies pour lancer des exceptions et intercepter des exceptions. • Le type de paramètre de panique et de récupération est interface{}, donc tout type d'objet peut être lancé.

• Si une erreur fatale se produit dans le programme et que l'ensemble du programme ne peut pas continuer, golang fournit la fonction de panique pour quitter le programme.

• Lorsqu'un programme panique, utilisez recovery pour reprendre le contrôle du programme .

• Toutes les exceptions de panique ne proviennent pas de l'exécution, l'appel direct de la fonction de panique intégrée provoquera également des exceptions de panique.

• La fonction de panique accepte n'importe quelle valeur comme paramètre.

(1) Utilisation de la panique

① Les erreurs causées lors du débogage retardé peuvent être capturées par le débogage retardé ultérieur, mais seule la dernière erreur peut être capturée.

func test() {defer func() {
    fmt.Println(recover())
}()defer func() {
    panic("defer panic")
}()
    panic("test panic")
}func main() {
    test()    //defer panic}
Copier après la connexion

②Lorsqu'une fonction panique, elle termine son exécution une fois que toutes les fonctions de retard sont exécutées, le contrôle du programme revient à l'appelant de la fonction. Ce processus se poursuivra jusqu'à ce que toutes les fonctions de la coroutine actuelle reviennent et se terminent, puis le programme imprimera les informations de panique, puis imprimera la trace de la pile, et enfin le programme se terminera.

Si la fonction ne panique pas, appeler la fonction de récupération n'obtiendra aucune information et n'affectera pas le processus en cours.

démo

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")
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal